中断されたプロセスを終了しますか?

中断されたプロセスを終了しますか?

私は少し混乱しています:

% vim tmp
zsh: suspended   vim tmp
% kill %1
% jobs
[1]  + suspended   vim tmp
% kill -SIGINT %1
% jobs
[1]  + suspended   vim tmp
% kill -INT %1
% jobs
[1]  + suspended   vim tmp

だから私はただ「自分でやってみる」ために仕事をやめ、後でその理由が何なのか気になりました。

% fg
[1]  - continued   vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated   vim tmp
%

ああ!

今考えてみると、vimシグナルハンドラが終了してこれを実行するように指示するには、実行している必要があります。

しかし、明らかに私が望むものではありません。

単一のコマンドで「目覚めて終了」する方法はありますか?つまり、kill %N && fg %N? の組み込みエイリアスです。

バックグラウンドリカバリが機能しないのはなぜですか?bg代わりにIを使用すると、fgVimはIまで生きます。fgこれは上記の直観を崩します。

ベストアンサー1

vi-vi-viそれは悪魔に属するものです。火で殺さなければなりません。またはSIGKILL:

kill -KILL %1

組み込み関数は中断されたプロセスにkill転送するのに十分なSIGCONTので、直接実行する必要はありません。ただし、プロセスが送信する信号をブロックしたり、プロセスが再び中断されるようにする信号を処理したりすることは役に立ちません(バックグラウンドプロセスが端末から読み取ろうとするとデフォルトで送信され、SIGTTIN処理されない場合はプロセスが中断されます)。

おすすめ記事