rsync後如何依序取消下一個作業

rsync後如何依序取消下一個作業

如果在 bash 命令列中輸入兩個作業並用分號分隔:

$ job 1; job 2;

怎麼取消第二個呢?如果我按CTRL+ c,第一個作業將被取消,「作業 2」將開始,我只想停止第二個作業而不執行。我嘗試了 atq、ps 但沒有運氣,使用 ps -ef 我只能看到“作業 1”,但未列出“作業 2”,因此我無法獲取 PID 來使用kill。我知道我可以用 && 來代替 ;但現在已經太晚了,我不小心在我的伺服器而不是我的家用電腦上運行了這個命令,現在我正在嘗試找出如何防止災難。

此問題特定於 rsync 指令後面接著另一個指令:

$ rsync ..... ; sudo shutdown -h now

透過 ID 殺死進程或殺死其父進程將不起作用。

經過幾個小時的測試,我將其隔離到 rsync,其他命令我可以以各種順序用CTRL+終止c,但如果它們在rsync 或ping 等命令之後則不能,我嘗試了不同的Ubuntu 版本、內核、沒有sudo 用戶的伺服器我可以在任何地方重現它,避免此問題的最佳方法是在 rsync 之後使用 && 僅在成功退出代碼 0 時執行以下命令:

$ rsync .... && job 2

答案1

殺死父親行程job1 的 與SIGKILL.

在進程樹中顯示進程,例如。與htopps axf併殺死job1的父行程而不是 job1 本身。


安裝htop

sudo apt-get install htop

投反對票的人,在投反對票前先了解答案

答案2

我認為你錯過了一些東西,當你運行兩個由 + 分隔的命令時,你可以通過+;殺死這兩個命令。CTRLc

只是為了確定嘗試這個指令:

find / -name a ; ls /home

CTRL然後使用+終止上述命令c,這將終止兩個進程,您將不會列出您的家庭內容。即,下一個命令將不會運行。


更新:rsync這對於您的命令也有效。這是我的例子:

$ rsync -avz /var/cache/apt/archives/ /tmp/backups/ ; sudo shutdown -h now

sending incremental file list
created directory /tmp/backups
./
authbind_1.2.0build3_amd64.deb
................
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
[sudo] password for user: 

正如您在上面看到的,當您運行CTRL+時c,這將殺死第一個命令,並且在開始關閉時它會詢問您的密碼,因此您現在可以再次使用+sudo殺死第二個進程。CTRLc


更新2作為解決問題的方法,你可以這樣做:

  • 由於您使用無密碼,因此透過編輯 sudoer 檔案sudo再次要求輸入密碼sudosudo visudo
  • 如果沒有其他辦法的話,作為最後一步只是一個駭客,這是不可取的編輯/sbin/shutdown命令以刪除+x或將其重新命名為不同的名稱。

相關內容