Linux:查看并杀死被拒绝的进程

use*_*198 8 linux bash process

我已经在 Linux 中使用&和启动了一个程序disown
我想看看它是否仍在运行并可能杀死它。

我用这样的命令开始了这个过程:

(env)bash-4.2$ python manage.py update_rollups &

[1] 29144

(env)bash-4.2$ disown
Run Code Online (Sandbox Code Playgroud)

我无法再ps aux通过 pid找到它,也无法根据 pid 杀死它29144
我想知道该进程是否仍在运行(在init?下)。

我希望你能帮忙!

Has*_*tur 12

简单来说

使用&并且disown您不会更改进程的 PID [ 1 ]
如果您没有在ps -p <YOURPID>输出中看到它,则它不再运行。
您可以(or ) 命令之后使用额外的echo $? [ 2 ]对其进行过度检查,检查程序是否以不同于(通常)的退出代码退出。pskill01

理解你的命令。

  • 背景:当您使用 final 启动命令时,&您将在后台发送它。
    这意味着:

    • 它存在于您的 shell 的作业列表中(在您的示例中是数字[1],您可以将其称为%1;(尝试命令jobs)。
    • 您可以使用fg和将其置于前景和背景中bg
    • 它(仍然)由(链接到父级)外壳程序“拥有”:如果外壳程序接收到SIGHUP信号,它也会向SIGHUP进程发送信号。

      $ sleep 1h &
      [1] 10795
      $ jobs
      [1]+  running           sleep 1h & 
      $ ps -l -p 10795       
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
      
      Run Code Online (Sandbox Code Playgroud)
  • Disown:使用命令disown从 shell 的作业列表中删除作业,但不更改其 PID。

    $ disown
    $ jobs
          # <---- No jobs
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 
    
    Run Code Online (Sandbox Code Playgroud)

    注意相同的 PPID(外壳仍然存在)。
    现在我们杀死shell。

    $ kill 8380   # Here we kill the shell 
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  5339  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
    
    Run Code Online (Sandbox Code Playgroud)

    还有另一个PPID, 5339, 再次调用ps, ps -p 5339,您会发现它是一个init实例:

    $ ps -p 5339
    PID TTY          TIME CMD
    5339 ?        00:02:20 init
    
    Run Code Online (Sandbox Code Playgroud)

pstree: 更快的方法。

你可以pstree更快地看到。

disownkill bash命令之前:

$ pstree -s -p 10795 
init(1)???lightdm(1199)???lightdm(5259)???bash(8380)???sleep(10795)
Run Code Online (Sandbox Code Playgroud)

之后,disown杀死的bash

$ pstree -s -p 10795 
init(1)???lightdm(1199)???lightdm(5259)???init(5339)???sleep(10795)
Run Code Online (Sandbox Code Playgroud)

注意:当然,您案例中的所有 PID 都会有所不同...


use*_*686 5

如果它不在 中ps auxf,则它没有运行。如果您运行kill 29144并得到“没有这样的进程”,这也意味着该进程没有运行。