CHILD=$!
sleep 2;
if kill -KILL ${CHILD} 2>/dev/null; then
echo "*** timed out after 2 seconds"
KILLED=yes
else
echo "terminated within time limit"
killed=no
fi
wait ${CHILD}
我对这里发生的事情以及如何'以及如何'执行。我的理解是,这会检查杀死子进程是否成功,然后将KILLED变量设置为yes并打印出一条消息。否则将KILLED设置为no并打印不同的消息。
我认为当命令成功时会返回0?如果真的不是“如果'将其解释为false并执行else?
我也对所打印的信息的含义感到困惑。我想我并不理解“超时”与“超时”之间的区别。并且'终止'。 (即我假设'已终止的消息将发送到'超时'消息的位置,反之亦然)。
谢谢!
答案 0 :(得分:1)
如果您来自C或Java等语言,这有点违反直觉,但在bash中,0
退出状态实际上被解释为true
。以下是手册的摘录:
if命令最紧凑的语法是:
如果TEST-COMMANDS;然后是后果指令;网络
执行TEST-COMMAND列表,如果其返回状态为零,则执行CONSEQUENT-COMMANDS列表。返回状态是执行的最后一个命令的退出状态,如果没有条件测试为真,则返回零。
这非常有用,因为通常有很多方法可以使进程失败(给出不同的非零状态),但只有一种方法可以使一切正常工作(零状态)。
我认为你的其他问题在此之后回答: - )
答案 1 :(得分:0)
kill
如果进程仍然存在并且被杀死,则返回退出代码0
(true)。在这种情况下,KILLED=yes
。
kill
将返回退出代码1
(false),可能是因为该进程不再运行。在这种情况下,KILLED=no
。