【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我有一个已经运行了很长时间并且不想结束它的进程。
我怎么把它放在nohup下(也就是说,即使关闭终端,如何让它继续运行?)
#1楼
假设由于某种原因, Ctrl + Z也无法正常工作,转到另一个终端,找到进程ID(使用ps
)并运行:
kill -SIGSTOP PID
kill -SIGCONT PID
SIGSTOP
将暂停该过程, SIGCONT
将在后台恢复该过程。 所以现在,关闭两个终端并不会停止你的过程。
#2楼
不幸的是, disown
特定于bash,并不适用于所有shell。
某些类型的Unix(例如AIX和Solaris)在nohup
命令本身上有一个选项,可以应用于正在运行的进程:
nohup -p pid
见http://en.wikipedia.org/wiki/Nohup
#3楼
这些都是上面的好答案,我只是想补充说明:
你不能disown
一个pid或进程,你disown
一份工作,这是一个重要的区别。
作业是附加到shell的进程的概念,因此您必须将作业放入后台(而不是暂停它),然后将其取消。
问题:
% jobs
[1] running java
[2] suspended vi
% disown %1
有关Unix作业控制的更详细讨论,请参见http://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/ 。
#4楼
将运行过程发送到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
。
#5楼
在我的AIX系统上,我试过了
nohup -p processid>
这很好用。 即使在关闭终端窗口后,它仍继续运行我的过程。 我们将ksh作为默认shell,因此bg
和disown
命令不起作用。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3143681