web-dev-qa-db-ja.com

Linuxで停止したジョブを再開する方法

Linuxで停止したジョブを再開する方法私はemacsを使っていて、誤ってctrl-zを押してコンソールに戻りました。 「jobs」と入力すると表示されます

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
326
Bobby

コマンドfgはあなたが使いたいものです。複数の停止したジョブがある場合は、ジョブ番号を付けることもできます。

365
Ilkka

Linuxの一般的なジョブ制御コマンドは次のとおりです。

  • jobs - 現在の求人を一覧表示する
  • fg - キュー内の次のジョブを再開します
  • fg%[番号] - ジョブを再開[番号]
  • bg - キュー内の次のジョブをバックグラウンドにプッシュする
  • bg%[number] - ジョブ[number]をバックグラウンドにプッシュする
  • kill%[number] - 番号[number]のジョブを強制終了する
  • kill - [シグナル]%[番号] - シグナル[シグナル]をジョブ番号[番号]に送信
  • disown%[number] - プロセスを破棄します(所有者になる端末はもうありません)。端末を閉じてもcommandは有効になります。

それはほとんどすべてです。コマンド内のジョブ番号の前にある%に注意してください - これは、プロセスではなくジョブについて話していることをkillに伝えます。

252
Majenko

%<process_name>と入力することもできます。つまり、emacsでCtrl-Zを押すと、コンソールに%emacsと入力して前面に戻すことができます。

47
NickD

他の答えに加えて、bashを使用すると、ジョブ番号を指定した場合にfgをスキップできます。

たとえば、これらは同等で最新の仕事を再開します。

%
%%
fg
fg %

これらの履歴書ジョブ#4:

%4
fg 4
31
grawity

現在の端末から起動しなかった場合は、ps aux | grep <process name>を使用してプロセス番号(pid)を見つけ、それを再開します。

kill -SIGCONT <pid>

(名前にもかかわらず、killは単にシグナルをプロセスに送信し、プロセスが相互に通信できるようにするためのツールです。「killシグナル」は、多くの標準シグナルの1つにすぎません。)

ヒント:プロセス名の最初の文字を[]で囲むと、grepコマンド自体が結果に表示されなくなります。例えばemacsプロセスを見つけるには、ps aux | grep [e]macsを使用します。

18
mahemoff