为了账号安全,请及时绑定邮箱和手机立即绑定

如何将已经运行的进程置于nohup下?

如何将已经运行的进程置于nohup下?

倚天杖 2019-11-21 10:20:53
我有一个已经运行很长时间的进程,不想结束它。如何将其置于nohup下(即,即使关闭终端,如何使它继续运行?)
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

使用bash 的作业控制将流程发送到后台:

  1. CtrlZ停止(暂停)程序并返回外壳。

  2. bg 在后台运行它。

  3. disown -h [job-spec]其中[job-spec]是作业编号(例如%1第一个正在运行的作业;请使用jobs命令查找您的编号),以便在终端关闭时不会终止该作业。


查看完整回答
反对 回复 2019-11-21
?
隔江千里

TA贡献1906条经验 获得超10个赞

假设由于某种原因Ctrl+ Z也无法正常工作,请转到另一个终端,找到进程ID(使用ps)并运行:


kill -SIGSTOP PID 

kill -SIGCONT PID

SIGSTOP将暂停该过程并SIGCONT在后台继续该过程。因此,现在关闭两个终端都不会停止您的过程。


查看完整回答
反对 回复 2019-11-21
?
繁星coding

TA贡献1797条经验 获得超4个赞

从外壳程序中分离正在运行的作业的命令(=使之成为nohup)是disown一个基本的外壳程序命令。


从bash-manpage(man bash):


放弃[-ar] [-h] [jobspec ...]


如果没有选项,则会从活动作业表中删除每个作业规范。如果指定了-h选项,则不会从表中删除每个作业规范,而是将其标记为如果外壳程序收到SIGHUP则不会将SIGHUP发送给作业。如果不存在jobspec,并且-a和-r选项均未提供,则使用当前作业。如果未提供jobspec,则-a选项表示删除或标记所有作业;不带jobspec参数的-r选项将操作限制为正在运行的作业。除非jobspec没有指定有效的作业,否则返回值为0。


这意味着,一个简单的


disown -a

将从作业表中删除所有作业,并使它们不再工作


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 1147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信