标签: shell-trap

陷阱火灾后退出

拿这个脚本

#!/bin/sh

fd ()
{
  echo Hello world
  exit
}

trap fd EXIT INT

for g in {1..5}
do
  echo foo
  sleep 1
done
Run Code Online (Sandbox Code Playgroud)

我想fd从Control-C或者脚本正常退出时触发一次.但是,如果你点击Control-C它会运行两次.我怎样才能解决这个问题?

bash shell-trap

10
推荐指数
1
解决办法
925
查看次数

同时在Bourne shell中监视信号和进程退出

我有一个想要监视另一个程序的Bourne shell(/ bin/sh)脚本(为了便携性).它应该启动另一个程序,然后等待它退出.当第二个程序退出时,它会做一些最后的工作并退出.问题在于脚本需要响应信号(例如USR2)并在这些信号出现时做一些工作.

我天真的实施是:

#! /bin/sh
echo $$
trap 'echo Respond to USR2' USR2
/bin/sleep 120 &
pid=$!
wait $pid
echo $pid exited with $?
echo Doing final cleanup
Run Code Online (Sandbox Code Playgroud)

这不起作用.如果我发送shell SIGUSR2,陷阱会按预期触发,但是等待也完成,返回140./bin/sleep继续它的快乐方式.典型输出:

28849
Respond to USR2
28850 exited with 140
Doing final cleanup
Run Code Online (Sandbox Code Playgroud)

这个行为在dash和bash之间是一致的,我可以方便地访问两个Bourne shell派生物.

我目前的工作是旋转循环等待子PID消失,用kill进行探测.自旋循环似乎很浪费,并且扩大了窗口,如果PID被快速重用,我的脚本可能会错误地等待错误的进程.

#! /bin/sh
echo $$
trap 'echo Respond to USR2' USR2
/bin/sleep 15 &
pid=$!
while /bin/kill -0 $pid 2> /dev/null; do
    echo waiting...
    sleep 2
done
echo Doing final cleanup
Run Code Online (Sandbox Code Playgroud)

鉴于我的目标是同时等待另一个进程退出并能够响应信号,是否有更好的解决方案?

signals sh wait shell-trap

8
推荐指数
1
解决办法
740
查看次数

收到SIGINT或SIGTERM时是否需要执行trap EXIT?

我有一个简单的脚本

trap 'echo exit' EXIT
while true; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)

并且它在不同的shell中表现不同:

$ bash tst.sh
^Cexit
$ dash tst.sh
^C
$ zsh tst.sh
^C
$ sh tst.sh
^Cexit
Run Code Online (Sandbox Code Playgroud)

所以我不确定它应该如何操作以及它是否被指定.

error-handling shell signals shell-trap

7
推荐指数
1
解决办法
1045
查看次数

捕获shell退出代码

我正在开发一个shell脚本,并希望处理我可能遇到的各种退出代码.为了尝试,我使用这个脚本:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些东西,但似乎我无法陷入自己的"退出1".如果我试图陷阱0一切正常:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit
Run Code Online (Sandbox Code Playgroud)

关于捕获HUP(1)退出代码有什么我应该知道的吗?

shell signals exit-code shell-trap

3
推荐指数
1
解决办法
2450
查看次数

标签 统计

shell-trap ×4

signals ×3

shell ×2

bash ×1

error-handling ×1

exit-code ×1

sh ×1

wait ×1