我有一个已经运行了很长时间而且不想结束它的进程。 php
我怎么把它放在nohup下(也就是说,即便关闭终端,如何让它继续运行?) java
假设因为某种缘由, Ctrl + Z也没法正常工做,转到另外一个终端,找到进程ID(使用ps
)并运行: python
kill -SIGSTOP PID kill -SIGCONT PID
SIGSTOP
将暂停该过程, SIGCONT
将在后台恢复该过程。 因此如今,关闭两个终端并不会中止你的过程。 shell
不幸的是, disown
特定于bash,并不适用于全部shell。 bash
某些类型的Unix(例如AIX和Solaris)在nohup
命令自己上有一个选项,能够应用于正在运行的进程: spa
nohup -p pid
见http://en.wikipedia.org/wiki/Nohup unix
这些都是上面的好答案,我只是想补充说明: code
你不能disown
一个pid或进程,你disown
一份工做,这是一个重要的区别。 进程
做业是附加到shell的进程的概念,所以您必须将做业放入后台(而不是暂停它),而后将其取消。 ip
问题:
% jobs [1] running java [2] suspended vi % disown %1
有关Unix做业控制的更详细讨论,请参见http://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/ 。
将运行过程发送到nohup( http://en.wikipedia.org/wiki/Nohup )
nohup -p pid
,它对我不起做用
而后我尝试了如下命令,它工做得很是好
运行一些SOMECOMMAND,好比/usr/bin/python /vol/scripts/python_scripts/retention_all_properties.py 1
。
按Ctrl + Z中止(暂停)程序并返回shell。
bg
在后台运行它。
disown -h
以便在终端关闭时不会终止进程。
键入exit
以exit
shell,由于如今你很好,由于操做将在后台运行它本身的进程,所以它不依赖于shell。
这个过程至关于运行nohup SOMECOMMAND
。
在个人AIX系统上,我试过了
nohup -p processid>
这很好用。 即便在关闭终端窗口后,它仍继续运行个人过程。 咱们将ksh做为默认shell,所以bg
和disown
命令不起做用。