如果我不是启动进程的人,有没有办法等到进程完成?
例如如果我运行“ps -ef”并选择任何 PID(假设我有权访问进程信息) - 有没有办法可以等到 PID 完成并获取其退出代码?
你可以使用strace
,它跟踪信号和系统调用。以下命令等待程序完成,然后打印其退出代码:
$ strace -e none -e exit_group -p $PID # process calls exit(1)
Process 23541 attached - interrupt to quit
exit_group(1) = ?
Process 23541 detached
$ strace -e none -e exit_group -p $PID # ^C at the keyboard
Process 22979 attached - interrupt to quit
--- SIGINT (Interrupt) @ 0 (0) ---
Process 22979 detached
$ strace -e none -e exit_group -p $PID # kill -9 $PID
Process 22983 attached - interrupt to quit
+++ killed by SIGKILL +++
信号来自^Z
, fg
and kill -USR1
也被打印出来。无论哪种方式,您都需要使用sed
如果您想在 shell 脚本中使用退出代码。
如果 shell 代码太多,您可以使用我用 C 编写的程序 https://gitlab.com/monpid/monpid/blob/master/monpid.c一会儿回来。它用ptrace()
捕获 pid 的信号和退出代码。 (它有粗糙的边缘,可能无法在所有情况下工作。)
我希望这有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)