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 启动命令时,&您将在后台发送它。
这意味着:
[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更快地看到。
在disown和kill 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 都会有所不同...
| 归档时间: |
|
| 查看次数: |
16305 次 |
| 最近记录: |