2014-04-29 15 views
-2

我正在嘗試編寫一個腳本(它總是在後臺運行)來終止一個進程,一旦發現它正在運行。一個shell腳本,當它被發現正在運行時,終止一個進程

該腳本始終在循環迭代後退出。我如何解決這個問題?

我的腳本:

 
#!/bin/bash 

PROCESS=`ps A | grep iTunes | grep -v grep` 

for i in 'seq 1 $max' 
do 
     if [ "$?" -ne "1" ]; then 
       killall iTunes 
     fi 
done 
+1

您的腳本包含多個語法錯誤。此外,什麼是'最大'。考慮閱讀教程來了解語法。 – devnull

+0

您設置了「PROCESS」,但不要在任何地方使用它。 '$ max'的值似乎沒有在任何地方設置。如果您在顯示的「seq 1 $ max''上使用單引號,而不是反碼,則循環將運行1次(值爲」$ i ='seq 1 $ max'')並停止。 – lurker

+1

嗯,我對shell腳本很陌生。準確的15分鐘! – Sam

回答

1

用途:

#!/bin/bash 
killProc() { 
    while true 
    do 
     killall -9 $1 2>&1 >> /dev/null 
     sleep $2 
    done 
} 
killProc iTunes 5 #This will kill iTunes every 5 seconds. 
+1

兩個循環不是必需的 – lurker

0

運行如下命令:

while sleep 60;do killall iTunes;done 

要運行每五分鐘的命令,運行crontab -e(或EDITOR=nano crontab -e)並添加一行如下:

*/5 * * * * killall iTunes 

另一種選擇是這plist中保存爲~/Library/LaunchAgents/killitunes.plist

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>killitunes</string> 
    <key>ProgramArguments</key> 
    <array> 
    <string>killall</string> 
    <string>iTunes</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>300</integer> 
</dict> 
</plist> 

然後運行launchctl load ~/Library/LaunchAgents/killitunes.plist

相關問題