shell等待特定进程pid退出的方法
Posted rayylee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell等待特定进程pid退出的方法相关的知识,希望对你有一定的参考价值。
Bash 内置了 wait 命令用于等待进程的退出,并返回其退出码:
wait [-n] [n ...]
Wait for each specified child process and return its termination status.
Each n may be a process ID or a job specification; if a job spec is given, all processes in that job's pipeline are waited for.
If n is not given, all currently active child processes are waited for, and the return status is zero.
If the -n option is supplied, wait waits for any job to terminate and returns its exit status.
If n specifies a non-existent process or job, the return status is 127.
Otherwise, the return status is the exit status of the last process or job waited for.
但是,从说明来看,wait只能等待当前shell的子进程。如果等待的进程不是当前进程的子进程,则会报告如下错误:
$ wait 1
-bash: wait: pid 1 is not a child of this shell
但是,很多时候我们需要等待任意的进程,那么,wait就不适用了。则需要其他办法。
等待任意进程退出的办法
tail
用法:tail --pid=$pid -f /dev/null
。
注意:这种方法不适用于 macOS,因为其下的 tail 不支持--pid
参数。但可以用来自 GNU 的 gtai
l。
哈哈,可能谁也没有想到 tail 竟然还有--pid
这个神奇的参数。
tail 的帮助说明:
--pid=PID
with -f, terminate after process ID, PID dies
-f, --follow[={name|descriptor}]
output appended data as the file grows;
an absent option argument means 'descriptor'
lsof
用法:lsof -p $pid +r 1 &>/dev/null
。
lsof 用于枚举打开的文件。所以这个命令要求进程有打开文件。哪个进程那么极端会没有打开文件呢?
以上是关于shell等待特定进程pid退出的方法的主要内容,如果未能解决你的问题,请参考以下文章