Ubuntu
鑑於它會產生許多程序,我如何使用 crontab 殺死“repo sync”?
我需要在一夜之間“重新同步”Android 源,因為我的每月頻寬是有限的。
,我在午夜開始’repo sync’,然後想在早上 8 點殺死它。以下是命令:
2 0 * * * /home/user/android-src/reposync.sh
reposync.sh 包含:
cd /home/user/android-src /home/user/bin/repo sync
我希望用以下 cron 條目殺死它:
55 7 * * * ps -eo pid,args | grep repo | awk '{print $1}' | xargs -I {} kill {} 0 8 * * * ps -eo pid,args | grep repo | awk '{print $1}' | xargs -I {} kill -9 {}
問題是“repo sync”產生了許多程序——很多“git”、“curl”、“git-remote-http”、“python”(我認為是“bash”和“sh”,因為我將 repo sync 命令放入 .sh 腳本中)。(為我的無知/術語道歉。)
我怎樣才能找到殺死它們的程序?或者,還有更好的方法?repo 會以普通使用者身份執行,而我可以殺死該使用者的所有任務嗎?我想讓我的電腦在無人看管的情況下執行幾天,讓它每天晚上連接並每天早上斷開連接,儘管任何解決方案都值得考慮,包括醜陋的,例如,我是否應該終止網際網路連接所以回購超時恢復嗎?伺服器上沒有其他東西在執行,(執行 Ubuntu 10.04 的 Win7 x64 上的 VirtualBox),所以我應該每早上 8 點重新啟動一次嗎?
使用否定參數來
kill
殺死整個程序組。#!/bin/sh ps -eo pid,args | awk '/[r]epo/{print $1}' | xargs -I {} kill "$@" -{}
還要注意關於如何避免無用
grep | grep -v grep | awk
的古老常見問題解答。像這樣呼叫
55 7 * * * /path/to/killsync 0 8 * * * /path/to/killsync -9
我們希望永遠不需要第二個;希望那也沒用。
見https://stackoverflow.com/questions/11000538/linux-kill-with-negative-pid
您需要殺死的程序產生了也需要被殺死的子程序:
vi killemall.sh --------------- #!/bin/bash # # Get the process PID # Kill all the processes that have a parent pid = PID # Kill the master process # MASTERPID=`ps -eo pid,args | grep repo | awk '{print $1}'` ps -ef | grep ${MASTERPID} | awk '{print $1}'` | while read PIDX; do kill -9 ${PIDX} 2>/dev/null; done;
repo 會以普通使用者身份執行,而我可以殺死該使用者的所有任務嗎?
# Should work, but it's a complete overkill
我應該終止網際網路連接以便回購超時然後恢復它嗎?所以我應該每 8 點重新啟動一次嗎?
# No need to come up with "excentric" solutions. Follow the Kill-Em-ALL approach, and that should solve your issue.