我想在Cygwin中運行一個shell腳本,但我遇到了將變量傳遞給子shell的問題!cygwin殺死進程問題
我有一個非常簡單的腳本,實際上需要一個進程的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 [email protected]' _ "$c"
#4
e=$(taskkill /PID $c)
我試圖殺死這個過程有四種不同的方式,而且他們沒有工作!
我不知道爲什麼(#1)和(#4)工作得很好,如果我直接在Cygwin終端內調用它們,但不是在運行「my_proc_kill.sh」時。
我注意到的另一件事是,如果我用實際進程號替換「$ c」,然後運行「my_proc_kill.sh」,那麼這將起作用。所以,它看起來變量值「$ c」沒有傳遞給「taskkill」!! 如何修改代碼,以便taskkill知道變量「$ c」?!?
但是不應該爲特定進程修復PID,只要我沒有終止進程,無論我訪問哪個進程ID的shell?
請指教如何解決這個問題?
以下是錯誤消息我得到的,當我運行該腳本:
5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid:
ERROR: Invalid query
爲什麼「殺」認爲這是非法的pid? 但是,當我在Cygwin終端中使用相同的PID號碼(本例中爲5040)時,它的工作原理是什麼? (以下是好的)
$/bin/kill -f 5040
任何想法如何解決這個問題?
在此先感謝。
1.用'echo。$ c.'替換'echo $ c'以確保$ c不包含空格等。 2.什麼殺了-f?未知在我的Ubuntu 10. 3.不'ps -W | grep -ir的行爲...'也打印grep的pid? 4.爲什麼grep -r? 5.什麼是ps -W? – user829755
我認爲這不是問題。因爲在腳本里面,我用實際的PID號代替了$ c(對於我的情況是5040),並且我仍然得到了和以前完全相同的錯誤。換句話說,我將腳本更改爲(/ bin/kill -f 5040)仍然是同樣的事情。我也試過(/ bin/kill/5040)仍然是一樣的錯誤。但是當我在Cygwin命令行中輸入這個精確的表達式(/ bin/kill -f 5040)時,它殺死了進程,並且一切看起來都很好。 – user2201373