【发布时间】:2018-07-03 15:47:07
【问题描述】:
我有一个调用 c shell 脚本的 perl 脚本。 类似于
system($cmd)
$cmd 包含一些 c-shell 脚本,它执行以下操作:
some_task1 &
set task1_id = $!
sleep 300s &
set task2_id = $!
while (`ps -p "$task1_id,$task2_id" | wc -l` > 2)
sleep 1m
end
# assume of the moment that task2 will finish first
kill -9 $task1_id
exit
我希望进程 task1_id 将被终止,并且 c-shell 脚本将完成并将控制权返回给调用 perl 脚本一次
sleep 300s
完成了。
然而,实际发生的是在
之后exit
控制永远不会返回到调用脚本。如何确保嵌套脚本实际返回?
谢谢。
【问题讨论】:
-
您的意思是在后台运行
sleep命令吗?这似乎违背了在后台运行其他任务然后将其杀死的目的。 -
是的,我做到了。想法是有一个任务和一个超时计时器。当任务和计时器都在运行时,有一个 while 循环会“休眠”一小段时间。当 while 循环完成时,谁先完成,谁就杀死另一个,报告并退出。
-
所以你的shell脚本看起来不像你在你的问题中提出的?
-
我以为我提供了相关的细节。已编辑问题以反映您的评论。
-
您能做的最好的事情是在您的 csh 代码中添加
echo "before exit" .... echo "after exit"类型的调试以查看实际情况。您可以使用#!/bin/csh -fbvx打开调试/跟踪(我忘记了-fb的作用,但我们也一直使用它,但请查看您的csh手册页以确认)。祝你好运。