根据条件将返回代码传递给父shell
我在一个包装器中运行一个包装器,其中最里面的一个拥有我的所有命令 像这样根据条件将返回代码传递给父shell,shell,background,wrapper,wait,exit-code,Shell,Background,Wrapper,Wait,Exit Code,我在一个包装器中运行一个包装器,其中最里面的一个拥有我的所有命令 像这样 L4.ksh # topmost wrapper L3.ksh L2.ksh Nohup command > log 2>&1& # label that c1 Nohup command > log 2>&1& # c2 wait
L4.ksh # topmost wrapper
L3.ksh
L2.ksh
Nohup command > log 2>&1& # label that c1
Nohup command > log 2>&1& # c2
wait # w1
Nohup command > log 2>&1& # c3
L2_1.ksh
Nohup command > log 2>&1& # label that c4
Nohup command > log 2>&1& # c5
wait # w2
Nohup command > log 2>&1& # c6
我想做的是捕获C6和C3的退出状态。当然我会坚持一个rc=$?在它下面。好的,就这么做了。
下一步-我希望当所有命令L2都完成时,查看C3的状态,它是L2中最后一个nohup,L2的退出代码应该是L2中的所有操作完成后的C3。注:这些C1、C2等均并行运行。
当L2完成时,我将以相同的方式执行L2_1,仅在L2完全完成后执行,即其中的所有进程都完成(因此C3可能已经完成,C1 C2仍在运行)
-但所有C都应符合要求标准)
最后,如果L2和L2_1的状态代码均为0,则L3应返回0,否则L3应返回非零状态代码
如果我把钱放进去?执行L2系列(C3和C6)中的最后一个命令,然后放置wait,然后退出$rc
C3
rc=$?
wait
exit $rc
对于L2和L2_1两者,然后对状态代码L3执行条件切换-这是否可以达到目的?或者怎样才能做到最好
泰
萨姆
感谢Dogbane为您回复捕获个人PID。问题是我不知道发射了多少炮弹。ksh是运行时生成的shell,包含命令
所以问题是如何收集所有PID。我必须启动一些计数器?跟踪。
当所有后台任务在shell中完成工作后,是否有更好的方法来确定状态,然后标记上次启动的后台任务的退出状态?我建议您捕获PID并等待它们,如下所示:
L2.ksh
nohup command > log 2>&1& # label that c1
c1_pid=$!
nohup command > log 2>&1& # c2
c2_pid=$!
nohup command > log 2>&1& # c3
c3_pid=$!
# wait for c1 and c2 to finish.
wait $c1_pid $c2_pid
# wait for c3 to finish
wait $c3_pid
exit $?
你好,谢谢你的回复。我更新了这个问题,并在上面加了一条注释,而不是把它放在评论中,因为它并不突出,而且很难阅读。