在这个答案在 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”的明确路径并没有什么区别,但指定信号的方式却有区别。