当我kill
在命令行上使用时它可以工作。
kill -SIGSTOP 1234
但如果我在 bash 脚本文件中使用,我会收到此错误:
kill: SIGSTOP: invalid signal specification
sh 文件是
#!/bin/sh
kill -SIGSTOP 1234
如何kill
在 bash 脚本中使用?我试过这个:
#!/bin/sh
/bin/bash -c "kill -SIGSTOP 1234"
但它不起作用。
答案1
kill -s STOP "$pid"
也就是说,没有SIG
前缀。一些 shell 实现支持kill -s SIGSTOP
或kill -SIGSTOP
作为扩展,但这不是标准的,也不是可移植的。
UNIX 规范 (POSIX+XSI) 还允许:
kill -STOP "$pid"
和
kill -19 "$pid"
虽然哪个信号编号SIGSTOP
没有指定,并且可能在系统之间甚至同一系统的架构之间发生变化,因此应该避免。
答案2
我面临着同样的问题。这里的所有答案都没有解决问题的真正原因。在脚本内部kill
使用的是内置的由外壳提供,这就是您出现错误的原因。在您的终端中,kill
使用的是位于 的单独可执行文件/bin/kill
。要解决此问题,您必须在脚本中显式使用/bin/kill
而不是内置 shell 版本。因此你这样写:
#!/bin/sh
/bin/kill -s SIGHUP 14344
答案3
首先: SIGSTOP
将暂时停止进程但保留在内存中,以便稍后可以使用SIGCONT
系统调用继续。您可以使用以下小片段来查看会发生什么
#!/bin/bash
set -x
sleep 100 &
pid=$!
kill -s SIGSTOP "$pid"
sleep 2
kill -s SIGCONT "$pid"
您将看到脚本以交互方式执行的操作。
因此,为了让你的脚本使用 shebang 工作,#/bin/sh
你需要做类似的事情
#!/bin/sh
set -x
set +o posix
sleep 100 &
pid=$!
kill -s SIGSTOP "$pid"
sleep 2
kill -s SIGCONT "$pid"
set -o posix