简介
在本实验中,你将学习如何使用 Linux 的 nohup 命令在后台运行长时间运行的进程,即使你退出终端会话后,进程仍会继续运行。你将了解 nohup 命令的作用,使用 nohup 运行一个长时间运行的进程,并将输出重定向到文件中。本实验涵盖了 Linux 环境中进程管理的实际示例。
nohup 命令允许你运行一个进程,即使在你退出登录后,该进程仍会继续执行,从而防止进程被终止。你将首先使用 nohup 运行一个简单的命令,并验证该进程是否仍在运行。然后,你将创建一个运行长时间进程的脚本,并使用 nohup 在后台运行它,同时将输出保存到文件中。
理解 nohup 命令的作用
在这一步中,你将学习 Linux 中 nohup 命令的作用。nohup 命令用于在后台运行命令或脚本,即使你退出终端会话后,进程仍会继续运行。
当你在终端中运行一个长时间运行的进程时,如果你退出或关闭终端窗口,该进程将被终止。nohup 命令允许你运行一个进程,即使在你退出登录后,该进程仍会继续运行,从而防止进程被终止。
让我们从使用 nohup 运行一个简单的命令开始:
nohup sleep 60 &
这将在后台运行 sleep 60 命令,并将输出保存到当前目录下名为 nohup.out 的文件中。
示例输出:
[1] 12345
命令末尾的 & 表示在后台运行该进程,输出显示了后台进程的进程 ID (PID)。
为了验证进程是否仍在运行,你可以使用 ps 命令:
ps aux | grep sleep
示例输出:
labex 12345 0.0 0.0 8184 712 pts/0 S 14:20 0:00 sleep 60
如你所见,sleep 60 进程仍在运行,即使我们已经退出了终端。
使用 nohup 运行长时间运行的进程
在这一步中,你将学习如何使用 nohup 命令在后台运行一个长时间运行的进程。
让我们从创建一个运行长时间进程的简单脚本开始。在 ~/project 目录下创建一个名为 long_process.sh 的新文件,内容如下:
#!/bin/bash
echo "Starting long-running process..."
sleep 120
echo "Long-running process completed."
使脚本可执行:
chmod +x ~/project/long_process.sh
现在,让我们使用 nohup 运行该脚本:
nohup ~/project/long_process.sh &
这将在后台启动长时间运行的进程,并将输出保存到当前目录下名为 nohup.out 的文件中。
示例输出:
[1] 12345
输出显示了后台进程的进程 ID (PID)。
为了验证进程是否仍在运行,你可以使用 ps 命令:
ps aux | grep long_process.sh
示例输出:
labex 12345 0.0 0.0 8184 712 pts/0 S 14:20 0:00 /bin/bash /home/labex/project/long_process.sh
如你所见,长时间运行的进程仍在运行,即使我们已经退出了终端。
将 nohup 输出重定向到文件
在这一步中,你将学习如何将使用 nohup 启动的长时间运行进程的输出重定向到自定义文件,而不是默认的 nohup.out 文件。
让我们从运行一个长时间运行的进程并将其输出重定向到自定义文件开始:
nohup ~/project/long_process.sh > ~/project/output.log 2>&1 &
以下是命令的每个部分的作用:
nohup ~/project/long_process.sh:使用nohup运行long_process.sh脚本。> ~/project/output.log:将进程的标准输出 (stdout) 重定向到~/project目录下的output.log文件。2>&1:将进程的标准错误 (stderr) 重定向到与标准输出相同的文件。&:在后台运行进程。
为了验证进程是否仍在运行以及输出是否被重定向到自定义文件,你可以使用以下命令:
ps aux | grep long_process.sh
cat ~/project/output.log
ps 命令将显示长时间运行的进程仍在运行,而 cat 命令将显示 output.log 文件的内容。
总结
在本实验中,你学习了 Linux 中 nohup 命令的作用,它允许你在后台运行长时间运行的进程,即使在你退出终端会话后,进程仍会继续运行。你首先使用 nohup 运行了一个简单的 sleep 60 命令,然后使用 ps 命令验证了该进程仍在运行。接着,你创建了一个运行长时间进程的脚本,并使用 nohup 在后台运行它,同时将输出保存到名为 nohup.out 的文件中。



