一个shell脚本,用于在发现进程运行时终止进程

时间:2014-04-29 15:43:25

标签: macos bash shell terminal sh

我正在尝试编写一个脚本(它总是在后台运行),以便在发现它正在运行时终止进程。

脚本总是在循环迭代后退出。我该如何解决这个问题?

我的剧本:

#!/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

2 个答案:

答案 0 :(得分: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 :(得分:1)

运行如下命令:

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