如何在nohup下放置已经运行的进程?

风格不统一 提交于 2019-12-16 18:22:39

【推荐】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 ,它对我不起作用

然后我尝试了以下命令,它工作得非常好

  1. 运行一些SOMECOMMAND,比如/usr/bin/python /vol/scripts/python_scripts/retention_all_properties.py 1

  2. 按Ctrl + Z停止(暂停)程序并返回shell。

  3. bg在后台运行它。

  4. disown -h以便在终端关闭时不会终止进程。

  5. 键入exitexit shell,因为现在你很好,因为操作将在后台运行它自己的进程,因此它不依赖于shell。

这个过程相当于运行nohup SOMECOMMAND


#5楼

在我的AIX系统上,我试过了

nohup -p  processid>

这很好用。 即使在关闭终端窗口后,它仍继续运行我的过程。 我们将ksh作为默认shell,因此bgdisown命令不起作用。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!