这是我的shell脚本:
#!/bin/bash
PIDS=$(ps -e | grep $1 |grep -v grep| awk '{print $1}')
kill -s SIGINT $PIDS
echo "Done sendings signal"
我将进程的名称作为命令行参数传递。
echo 命令没有被执行,尽管目标进程实际上正在接收 SIGINT 信号并退出。
有什么建议么?
更新:
我将代码更改为:
#!/bin/bash
PIDS=$(ps -e |grep $1 | grep -v grep | awk '{print $1}'|grep -v $$)
echo $PIDS
kill -s SIGINT $PIDS
echo "Done sendings signal"
echo "The current process is $$"
现在我注意到一件奇怪的事情:
脚本正在运行,但没有达到预期。在脚本外部的命令行中执行以下命令
ps -e|grep process-name|grep -v grep|awk '{print $1}'|grep -v $$
会给出进程名称的 pid,但是当我在 shell 脚本中执行相同的命令时,将其分配给变量 PIDS,然后回显 PIDS,然后除了进程的 pid 之外,它还会显示一个 pid-姓名。因此,当 kill 命令执行时,它会给出一个错误,即第二个 pid 的进程不存在。它确实与终端中的剩余句子相呼应。有什么线索吗?