man signal.h表示Solaris 11中没有SIGEXIT。如何将其捕获到我的shell脚本中?或者我如何模拟traints SIGEXT的旧行为?
答案 0 :(得分:3)
为什么要查看C API手册以获取shell功能?
你绝对可以在Solaris 11 shell下捕获SIGEXIT信号(至少ksh93,bash和sh)。
$ cat /etc/release
Oracle Solaris 11.1 X86
Copyright (c) 1983, 2012, Oracle and/or its affiliates. All rights reserved.
Assembled 19 September 2012
$ cat /tmp/z
#!/bin/ksh
trap "date" exit
sleep 60
echo done
$ /tmp/z
^CThursday, August 29, 2013 10:18:58 PM CEST
$
为了澄清,在Unix下没有也从未有过信号0或SIGEXIT。它是一种“伪”信号,可以通过两种方式使用:
通过向进程发送它(例如:kill -0 pid
),在这种情况下,目标进程没有收到任何内容,但发送方通过检查kill返回值将知道进程是否确实存在。
通过将其捕获到shell脚本中,在这种情况下,无论何时退出脚本,都将执行处理程序。
答案 1 :(得分:0)
要运行清理和其他类似任务,您可以将脚本包装在第二个脚本中。第二个脚本可以执行第一个脚本,存储退出代码,执行清理,并使用存储的代码退出。