使用此命令创建bash脚本:
cat <<"END"> z
#! /bin/bash
sleep 20 && exit 1 &
ret=$!
ps $ret | grep $ret
END
然后运行它得到:
7230 pts/39 S+ 0:00 /bin/bash ./z
我期望看到sleep 20 ...
这是子进程。如果删除&& exit 1
,它将返回子进程。
是什么原因?我如何在上面的语句中获取子进程ID?
sleep 20 && exit 1 &
先执行sleep 20s
,然后执行exit 1 &
。
您真正想要的是:
(sleep 20 && exit 1) &
这会产生一个在后台执行两个命令的子shell。