我如何在工作中使用符号信号?

我如何在工作中使用符号信号?

这个答案在 SO 上,我给出了一个例子,应该在提交给。但是我发现用-SIGSTOP停止的进程并没有继续。当我将信号改为数值时,它就起作用了。

echo "kill -18 $rspid"|at now + 2 minutes

使用数值不是一个好主意,因为它在不同的系统上可能会有所不同。

如何使用符号信号(-SIGCONT)而不是数字信号(-18)提交此作业?

答案1

我猜想,您的 at 作业所使用的 shell 与您在命令行中使用的 shell 不同,并且 at 作业 shell 没有内置 kill 来识别符号信号符号。这在 Ubuntu 上很常见,它使用 dash 表示 /bin/sh(默认情况下由 at 使用),但使用 /bin/bash 表示交互式 shell。

您可以通过指定路径来使用“kill”二进制文件:

echo "/bin/kill -CONT $rspid" | at now + 2 minutes

或者明确指定要执行的 shell:

echo "/bin/bash -c \"kill -CONT $rspid\"" |at now + 2 minutes

我以为有一个选项可以告诉您使用哪个 shell,但现在似乎找不到任何提及。也许 shebang 可以工作...

答案2

事实证明,dash 喜欢 -CONT 形式的信号,而不能理解 -SIGCONT 样式。由于 bash 可以理解这两种格式,因此使用前者可能更具可移植性。

在我的测试中,是否包含“kill”的明确路径并没有什么区别,但指定信号的方式却有区别。

相关内容