【问题标题】:How to kill a nohup process?如何杀死 nohup 进程?
【发布时间】:2011-12-21 21:14:06
【问题描述】:

我执行了以下命令

$ nohup ./tests.run.pl 0 &

现在,当我尝试使用

杀死它(以及从此脚本开始的执行)时
$ kill -0 <process_id>

它不起作用。如何杀死 nohupped 进程和通过 nohupped 脚本运行的进程?

谢谢

【问题讨论】:

    标签: bash process kill nohup


    【解决方案1】:

    kill -0 不会 终止进程。它只是检查你是否可以向它发送信号。

    只需kill pid,如果不起作用,请尝试kill -9 pid

    【讨论】:

    • @Mat,我需要先获取进程 ID 吗?如果我运行多个进程并希望一次将它们全部杀死怎么办?我使用多核进行并行计算,因此“nohup”调用了 10 个进程。我想把他们都杀了。你能在这里指导我吗?谢谢。
    • 我已经用 kill -9 杀死了一个 nohup 进程,但是当我运行命令 tail f nohup.out 时,我仍然在不断地获取日志......这意味着我的进程正在运行......该怎么办?
    【解决方案2】:

    只需kill &lt;pid&gt;,它将发送一个SIGTERMnohup 不会忽略。

    您不应该先发送SIGKILL,因为这会使进程没有机会恢复;您应该按顺序尝试以下操作:

    • SIGTERM (15)
    • SIGINT (2)
    • SIGKILL (9)

    【讨论】:

    • 绝对正确。进程的信号处理程序无法捕获 SIGKILL (kill -9)。这意味着您不能编写任何 Epilog 代码来删除临时文件和/或分离任何分配的共享内存段。未能清理共享内存意味着可供新进程使用的整体内存更少——这是一件令人讨厌的事情。
    【解决方案3】:

    我会这样做:

    jobs
    
    [1] + Running nohup ./tests.run.pl
    
    kill %1
    

    【讨论】:

      【解决方案4】:

      如果您不知道进程 ID,并且它可能在 shell(或循环)内运行各种命令,您可以运行 jobs -l 列出作业和 PID,然后运行 ​​kill 它们。

      查看示例:

      ubuntu@app2:/usr/share/etlservice/bin$ jobs -l
      [1]  27398 Running                 nohup ./extract_assessor_01.sh > job1.log &
      [2]  27474 Running                 nohup ./extract_assessor_02.sh > job2.log &
      [3]  27478 Running                 nohup ./extract_assessor_03.sh > job3.log &
      [4]- 27481 Running                 nohup ./extract_assessor_04.sh > job4.log &
      [5]+ 28664 Running                 nohup ./extract_assessor_01.sh > job1.log &
      ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27398
      sudo kill 27474[1]   Terminated              nohup ./extract_assessor_01.sh > job1.log
      ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27474
      [2]   Terminated              nohup ./extract_assessor_02.sh > job2.log
      ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27478
      [3]   Terminated              nohup ./extract_assessor_03.sh > job3.log
      ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27481
      [4]-  Terminated              nohup ./extract_assessor_04.sh > job4.log
      ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 28664
      [5]+  Terminated              nohup ./extract_assessor_01.sh > job1.log
      ubuntu@app2:/usr/share/etlservice/bin$
      

      【讨论】:

      • 谢谢你,迈克,你的回答有更详细的东西!
      【解决方案5】:

      杀死nohup进程

      ps aux |grep nohup
      

      grep PID kill -15 -1 16000(将注销您)并在下次登录根目录时清除

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-06
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多