【问题标题】:A shell script to kill a process, whenever it is found to be running一个 shell 脚本来杀死一个进程,只要它被发现正在运行
【发布时间】:2014-04-29 15:43:25
【问题描述】:

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

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

我的脚本:

#!/bin/bash 过程=`ps A | grep iTunes | grep -v grep` 对于我在'seq 1 $max' 做 如果[“$?” -ne "1" ];然后 杀死所有 iTunes 菲 完毕

【问题讨论】:

  • 您的脚本包含多个语法错误。此外,max 是什么。考虑阅读教程以了解语法。
  • 您设置了PROCESS,但不要在任何地方使用它。 $max 的值似乎没有在任何地方设置。如果您在显示时在 'seq 1 $max' 上使用单引号而不是反引号,那么您的循环将运行 1 次(值为 $i = 'seq 1 $max')并停止。
  • 好吧,我对 shell 脚本很陌生。准确地说是 15 分钟!
  • 您希望脚本运行多长时间?永远?你是如何运行它的?克朗工作?如果您已经在这 15 分钟内,那么在询问您的代码有什么问题之前,您似乎需要进行一些学习。 ;) 网上有很多教程。
  • 我将在终端中运行这个脚本(只要我愿意),不,这不是一个 cron 工作。

标签: macos bash shell terminal sh


【解决方案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.

【讨论】:

  • 不需要两个循环
【解决方案2】:

运行如下命令:

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

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 2013-06-17
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多