我正在尝试在 Cygwin 中运行一个 shell 脚本,但是我在将变量传递给子 shell 时遇到了问题!
我有一个非常简单的脚本,它实际上获取进程的 PID,然后我想从脚本中终止进程。
# my_proc_kill.sh
#
export c=$(ps -W | grep -ir behave | sed 's/\([0-9]\+\).*/\1/')
echo $c
#1
/bin/kill -f $c
#2
sh -c '/bin/kill -f ${c}' "$c"
#3
sh -c '/bin/kill -f $@' _ "$c"
#4
e=$(taskkill /PID $c)
我试图以四种不同的方式终止该进程,但没有一个起作用!
如果我直接在 Cygwin 终端中调用它们,我不知道为什么 (#1) 和 (#4) 工作得很好,但当我运行“my_proc_kill.sh”时就不行了。
我注意到的另一件事是,对于 (#4),如果我将“$c”替换为实际的进程号,然后运行“my_proc_kill.sh”,那么它将起作用。所以,看起来变量值“$c”没有传递给“taskkill”!如何修改代码,以便 taskkill 知道变量“$c”?!?
但是,不应该为特定进程修复 PID,只要我没有终止该进程,而不管我正在访问该进程 ID 的外壳是什么?
请告知如何解决这个问题?
这是我在运行脚本时收到的错误消息:
5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid:
ERROR: Invalid query
为什么“kill”将其视为非法pid?但是当我在 Cygwin 终端中使用相同的 PID 号(在本例中为 5040)时,它可以工作吗?(以下没问题)
$/bin/kill -f 5040
知道如何解决这个问题吗?
提前致谢。