杀死的回报值?

时间:2015-02-04 22:37:22

标签: bash unix

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?

我也对所打印的信息的含义感到困惑。我想我并不理解“超时”与“超时”之间的区别。并且'终止'。 (即我假设'已终止的消息将发送到'超时'消息的位置,反之亦然)。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您来自C或Java等语言,这有点违反直觉,但在bash中,0退出状态实际上被解释为true。以下是手册的摘录:

  

if命令最紧凑的语法是:

     

如果TEST-COMMANDS;然后是后果指令;网络

     

执行TEST-COMMAND列表,如果其返回状态为零,则执行CONSEQUENT-COMMANDS列表。返回状态是执行的最后一个命令的退出状态,如果没有条件测试为真,则返回零。

这非常有用,因为通常有很多方法可以使进程失败(给出不同的非零状态),但只有一种方法可以使一切正常工作(零状态)。

我认为你的其他问题在此之后回答: - )

答案 1 :(得分:0)

kill如果进程仍然存在并且被杀死,则返回退出代码0(true)。在这种情况下,KILLED=yes

如果kill失败,

kill将返回退出代码1(false),可能是因为该进程不再运行。在这种情况下,KILLED=no