man signal.h 表示 Solaris 11 中没有 SIGEXIT。如何在我的 shell 脚本中捕获它?或者如何模拟捕获 SIGEXT 的旧行为?
问问题
863 次
2 回答
3
您为什么要查看 C API 手册以获取 shell 功能?
您绝对可以在 Solaris 11 shell(至少 ksh93、bash 和 sh)下捕获 SIGEXIT 信号。
$ 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 脚本中,在这种情况下,无论如何都会在脚本退出时执行处理程序。
于 2013-08-29T20:21:12.717 回答
0
要运行清理和其他类似任务,您可以将脚本包装在第二个脚本中。第二个脚本可以执行第一个脚本,存储退出代码,执行清理,并使用存储的代码退出。
于 2013-08-29T18:43:49.993 回答