Ubuntu

鑑於它會產生許多程序,我如何使用 crontab 殺死“repo sync”?

  • May 31, 2013

我需要在一夜之間“重新同步”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.

引用自:https://unix.stackexchange.com/questions/77766