我有一个已经运行了很长时间的进程,不想结束它。

我如何把它放在nohup下(也就是说,我如何使它继续运行,即使我关闭了终端?)


当前回答

将正在运行的作业从shell中分离(=使其成为nohup)的命令是disown,是一个基本的shell命令。

来自bash-manpage (man bash):

disown [-ar] [-h] [jobspec ...] Without options, each jobspec is removed from the table of active jobs. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is supplied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.

这意味着,这是一个简单的

disown -a

将从工作表中删除所有的工作并使它们nohup

其他回答

假设由于某些原因Ctrl+Z也不能工作,转到另一个终端,找到进程id(使用ps)并运行:

kill -SIGSTOP PID 
kill -SIGCONT PID

SIGSTOP将挂起进程,SIGCONT将在后台恢复进程。所以现在,关闭两个终端不会停止进程。

将正在运行的作业从shell中分离(=使其成为nohup)的命令是disown,是一个基本的shell命令。

来自bash-manpage (man bash):

disown [-ar] [-h] [jobspec ...] Without options, each jobspec is removed from the table of active jobs. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is supplied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.

这意味着,这是一个简单的

disown -a

将从工作表中删除所有的工作并使它们nohup

使用bash的Job Control将进程发送到后台:

按Ctrl+Z停止(暂停)程序并返回shell。 Bg在后台运行它。 Disown -h [job-spec],其中[job-spec]是作业号(例如%1是第一个运行的作业;使用jobs命令查找您的号码),这样当终端关闭时作业就不会被终止。

在我的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作业控制的更详细讨论。