0

man signal.h 表示 Solaris 11 中没有 SIGEXIT。如何在我的 shell 脚本中捕获它?或者如何模拟捕获 SIGEXT 的旧行为?

4

2 回答 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 回答