Linux:查看并终止被放弃的进程

Linux:查看并终止被放弃的进程

&我在 Linux 中使用和启动了一个程序disown
我希望查看它是否仍在运行,并可能终止它。

我使用如下命令启动该过程:

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

[1] 29144

(env)bash-4.2$ disown

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

我希望你能帮忙!

答案1

简单来说

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

理解您的命令。

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

    • 它存在于您的 shell 的作业列表中(在您的示例中是数字[1],您可以将其引用为%1;(尝试命令jobs)。
    • fg您可以使用和将其置于前台和后台bg
    • 它还是)“拥有”通过(链接到父级)shell:如果 shell 收到信号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
      
  • 放弃:使用该命令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 
    

    注意相同的 PPID(该 shell 仍然存在)。
    现在我们终止该 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
    

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

    $ ps -p 5339
    PID TTY          TIME CMD
    5339 ?        00:02:20 init
    

pstree:一种更快捷的方法。

您可以pstree更快地看到。

之前disown杀死 bash命令:

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)

之后disown杀死 bash

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)

笔记:当然,您情况下的所有 PID 都会有所不同......

答案2

如果不在 中ps auxf,则表示该进程未在运行。如果运行后kill 29144得到“没有这样的进程”,则也表示该进程未在运行。

答案3

每个进程在/proc文件系统中都有一个包含它的文件夹pid。如果该文件夹不存在,则表示该进程未运行。

例如

/proc/29144/

您可以查看进程commandline

cat /proc/29144/cmdline

示例输出:

/usr/sbin/smbd

或者检查进程文件状态

stat /proc/29144/exe

示例输出:

File: /proc/29144/exe -> /usr/sbin/smbd
  Size: 0               Blocks: 0          IO Block: 1024   symbolic link
Device: 3h/3d   Inode: 78497       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-07 12:18:01.719011505 +0200
Modify: 2017-04-07 12:18:01.369010535 +0200
Change: 2017-04-07 12:18:01.369010535 +0200
 Birth: -

相关内容