这 nohup
命令,no hang-up 的缩写,用于在后台运行进程。 即使运行它的终端关闭,已被“nohuped”的进程也将继续运行。 有效, nohup
断开进程与终端的连接。
nohup 命令基本用法
在开始使用之前 nohup
,重要的是要了解它可以 只要 当进程尚未运行且尚未启动时使用。 (还有其他方法 nohup
一个已经在使用的进程 disown
命令。)
现在我们知道了 nohup 可以和不可以使用的地方,很容易 nohup
一个过程。 只需在命令前加上 nohup:
nohup <command>
运行 nohup 会做以下事情:
- 它忽略程序的 SIGHUP 信号. (但是,可以在程序内部更改此行为。本文稍后将详细介绍此异常。)
- 它关闭了
stdin
(该程序将 不是 能够读取任何输入,但会收到错误代码或EOF
如果它试图阅读)。 - 它重定向
stdout
和stderr
到文件nohup.out
,所以如果终端失败,程序在写入标准输出时不会失败。 这样,程序写入的任何内容都不会丢失。
让我们测试一下 nohup
现在命令。 我们会ping www.linuxfordevices.com
.
nohup ping www.linuxfordevices.com
但是,如果命令是一个长时间运行的命令,这将占用我们的终端( ping
直到被中断才结束,可以被认为是一个长时间运行的命令)。 这是因为 ping 命令 在前台. 即使您现在关闭终端,ping 仍会继续。
如果您想在“nohuping”命令后继续使用终端执行其他任务,则需要将此命令放入 背景.
Nohup 不占用终端
要将程序置于后台而不占用终端,请附加一个&符号’&
‘ 到命令的结尾。 让我们对前面的例子这样做:
nohup <command> &
在我们的例子中,输入
nohup ping www.linuxfordevices.com &
现在您可以安全地 close 终端和进程将继续在后台运行。 放心,让我们使用 ps 命令在不同的终端中检查进程。
ps aux | grep ping
从截图中可以看出,有一个 ‘?
‘ 在 ping 的输出中。 这 ‘?
‘ 表示该进程——在我们的例子中是 ping——没有附加到任何终端。 鉴于,就在`?
‘—— /dev/pts0
是终端 grep
我们刚刚运行的命令。
杀死一个 nohuped 进程
要杀死任何进程,更不用说 nohuped 了,你需要知道 进程 ID (PID) 的过程。 使用 ps 命令可以很容易地获得它。 输出的第二列给出了 PID。
ps aux | grep ping
然后,使用kill命令类型杀死进程
kill <PID>
Nohup 命令示例
现在让我们看看 nohup 命令的实际用途。
1.通过终端运行GUI应用程序
您可能已经尝试通过终端运行 Chrome 或 VLC。 但是,在这种情况下,问题在于这些应用程序附加到终端,并且在关闭终端时,会向这些应用程序发送 SIGHUP 信号。 应用程序通常在收到此信号时退出。
这是哪里 nohup
很有用。 要在后台运行 VLC 以便它不会在关闭终端时退出,请键入
nohup vlc &
现在,没有任何文件重定向 nohup
将所有输出/错误写入 nohup.out
主目录中的文件。 这在某些情况下可能是需要的,但在这种情况下,最好忽略 VLC 产生的输出/错误。 我们的最后一个班轮现在是
nohup vlc >/dev/null 2>&1 &
解释:
将标准输出重定向到 /dev/null
. 重定向错误( stderr
或者 2
) 到标准输出的任何地方 ( stdout
或者 1
)。
Chrome – Nohup 的一个例外
某些应用程序(例如 Chrome)有一个已知问题,即即使使用 nohup
命令。 要阅读有关此内容的更多信息,请访问此 StackExchange 答案。
发生这种情况是因为应用程序在收到 SIGHUP 信号时可能会改变行为,绕过 nohup
.
解决方法是使用 disown
命令如下
/usr/bin/google-chrome & disown $!
2.在后台运行服务器
在后台运行服务器对开发人员非常有用。 由于大多数这些服务器都是使用以下命令启动的
npm start #or python manage.py runserver
这些服务器,像任何其他命令一样,可以与 nohup
允许它们在后台运行,而同一个终端可用于其他任务。
例如,要在后台运行 Python Django 服务器,请键入
nohup python manage.py runserver >~/server_logs 2>&1 &
输出和错误被重定向到 ~/server_logs
.
结论
Nohup 是一个在后台运行进程的非常有用的命令。 它提供了一种快速简便的方法来创建守护进程和后台作业。 要了解有关 nohup 的更多信息,请查看其手册页。 我希望你学到了一些新的东西 nohup
命令通过这篇文章。 请在评论中告诉我们您还不知道 nohup 的哪些用法。