while循环如何实现进程等待?表达式ps -p "$pid1,$pid2" | wc -l >1的作用是什么?
C-shell中等待双进程的代码解析
问题1:while循环是如何等待进程的?
这个循环其实就是个“定时巡检小工具”:
- 每次循环启动时,都会先检查指定的两个进程是否还在运行
- 只要至少有一个进程还活着,就执行
sleep 1让脚本暂停1秒,避免频繁检查占用过多系统资源 - 1秒后回到循环开头,重复检查动作
- 直到两个进程都彻底终止,循环条件不成立,才会跳出这个循环,继续执行脚本后续内容
问题2:表达式ps -p "$pid1,$pid2" | wc -l > 1的具体作用是什么?
咱们拆解开每一部分来看:
ps -p "$pid1,$pid2":调用ps命令,通过给定的两个PID($pid1和$pid2)查询对应进程的状态。如果进程还在运行,ps会输出该进程的信息行;如果进程已结束,就不会输出对应行。注意,ps默认会输出一行表头(比如PID TTY TIME CMD),不管有没有存活进程。| wc -l:通过管道把ps的输出传给wc -l,这个命令的作用是统计输出内容的总行数。- 整个表达式
ps ... | wc -l > 1:判断统计出的行数是否大于1:- 两个进程都在运行:
ps输出表头+两行进程信息,共3行,wc -l返回3,3>1成立,循环继续 - 只剩一个进程运行:
ps输出表头+一行进程信息,共2行,wc -l返回2,2>1成立,循环继续 - 两个进程都结束:
ps只输出表头1行,wc -l返回1,1>1不成立,循环终止
- 两个进程都在运行:
说白了,这个表达式就是用来判断是否还有至少一个目标进程在运行,以此作为循环继续的依据。
内容的提问来源于stack exchange,提问作者Statman
相关产品推荐
相关产品推荐

