我有一个已经运行了很长时间的进程,不想结束它。
我如何把它放在nohup下(也就是说,我如何使它继续运行,即使我关闭了终端?)
我有一个已经运行了很长时间的进程,不想结束它。
我如何把它放在nohup下(也就是说,我如何使它继续运行,即使我关闭了终端?)
当前回答
使用bash的Job Control将进程发送到后台:
按Ctrl+Z停止(暂停)程序并返回shell。 Bg在后台运行它。 Disown -h [job-spec],其中[job-spec]是作业号(例如%1是第一个运行的作业;使用jobs命令查找您的号码),这样当终端关闭时作业就不会被终止。
其他回答
不幸的是,disown是bash特有的,并不是在所有shell中都可用。
某些类型的Unix(例如AIX和Solaris)在nohup命令本身上有一个选项,可以应用于正在运行的进程:
nohup -p pid
参见http://en.wikipedia.org/wiki/Nohup
在我的AIX系统上,我尝试了一下
nohup -p processid>
这很有效。它继续运行我的进程,即使关闭终端窗口。我们有ksh作为默认shell,所以bg和disown命令不起作用。
上面这些都是很好的答案,我只是想澄清一下:
你不能否认一个pid或进程,你不能否认一个工作,这是一个重要的区别。
作业是附加到shell的进程的概念,因此您必须将作业扔到后台(而不是挂起它),然后否认它。
问题:
% jobs
[1] running java
[2] suspended vi
% disown %1
参见http://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/ 参阅Unix作业控制的更详细讨论。
CTRL + z -暂停作业(不会取消!) Bg -这将把作业放在后台,并在运行过程中返回 Disown -a -这将切断与job的所有附件(所以你可以关闭终端,它仍然会运行)
这些简单的步骤将允许您在保持进程运行的同时关闭终端。
它不会放nohup(基于我对你的问题的理解,你不需要它)。
使用bash的Job Control将进程发送到后台:
按Ctrl+Z停止(暂停)程序并返回shell。 Bg在后台运行它。 Disown -h [job-spec],其中[job-spec]是作业号(例如%1是第一个运行的作业;使用jobs命令查找您的号码),这样当终端关闭时作业就不会被终止。