
2 つのジョブがセミコロンで区切られて bash コマンドラインに入力された場合:
$ job 1; job 2;
2 番目をキャンセルするにはどうすればよいですか? CTRL+を押すとc、最初のジョブがキャンセルされ、「ジョブ 2」が開始されます。2 番目のジョブが実行されないように停止したいだけです。 atq、ps を試しましたが、うまくいきませんでした。ps -ef では「ジョブ 1」しか表示されず、「ジョブ 2」はリストされていないため、kill を使用する PID を取得できません。 ; の代わりに && を使用できることは知っていますが、今となっては遅すぎます。このコマンドを自宅の PC ではなくサーバー上で誤って実行してしまい、災害を防ぐ方法を考えています。
この問題は、rsync コマンドの後に別のコマンドが続く場合に発生します。
$ rsync ..... ; sudo shutdown -h now
ID でプロセスを強制終了したり、その親を強制終了したりしても機能しません。
数時間のテストの後、この問題を rsync に特定しました。他のコマンドはさまざまな順序でCTRL+を使用して終了cできますが、rsync や ping などのコマンドの後の場合は終了できません。さまざまな Ubuntu バージョン、カーネル、sudo ユーザーなしのサーバーを試しましたが、どこでも再現できました。この問題を回避する最善の方法は、rsync の後に && を使用して、成功した終了コード 0 の場合にのみ次のコマンドを実行することです。
$ rsync .... && job 2
答え1
殺す親プロセスjob1 のSIGKILL
.
htop
またはをps axf
使用してプロセスをプロセスツリーに表示し、ジョブ1の親プロセスjob1 自体ではありません。
インストールhtop
sudo apt-get install htop
反対票を投じる人は、反対票を投じる前に答えを理解してください
答え2
何かが抜けていると思います。 で区切られた 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
を使用して 2 番目のプロセスを強制終了できるようになります。CTRLc
アップデート2この問題のハックとして、次の操作を実行できます。
- パスワードなしを使用している場合は、 sudoerファイルを編集してパスワードを
sudo
再度要求するようにしてください。sudo
sudo visudo
- 他に何も効果がなかった場合の最終ステップとしてそれは単なるハックであり、お勧めできませんコマンドを編集して
/sbin/shutdown
削除する+x
か、別の名前に変更します。