web-dev-qa-db-ja.com

「停止したジョブがあります」エラーが表示された場合はどうすればよいですか?

私はこのような状況に何度も直面しています。

たとえば、emacsのファイルをSudoの権限で開くときに、次を使用します。

Sudo emacs tet.c &

パスワードを尋ねる代わりに、Ubuntuはemacsウィンドウまたは端末の出力(pidを除く)なしでemacsプロセスを開始するだけで、画像を参照します(「&」を使用しない場合はパスワードを聞かれます):

enter image description here

これに関連する2つの質問があります。

  1. 「停止したジョブがあります」というエラーが表示された場合はどうすればよいですか?そのような停止したジョブをすべて特定し、それらを強制終了するにはどうすればよいですか?端末をクリアすると、これらの停止したプロセスのPIDはなくなります。

  2. Ubuntu/emacsがこのように動作するのはなぜですか?パスワードを聞かれないのはなぜですか?

60
Null pointer

There are stopped jobsメッセージはfar、far awayエラーになります。これは、シェルからの終了を試みることを知らせる単なる通知ですが、1つ以上の中断されたジョブ/プログラムがあります(この場合、emacsはコマンドの最後に&を使用してバックグラウンドに配置します)。意図しない限り、システムはシェルを終了してジョブを強制終了させません。このメッセージに応じて、いくつかのことができます。

  • jobsコマンドを使用して、中断したジョブを通知します
  • fgコマンドを使用して、フォアグラウンドでジョブを追加することを選択できます
  • ジョブが終了するかどうか気にしない場合は、もう一度exitと入力するだけです。 exitコマンドを使用して、または使用せずに、もう一度jobsと入力すると、中断されているすべてのジョブが終了します。

2番目の質問に答えるために、Ubuntuやemacsがこのように動作していないことを伝えます。これは、アプリケーションをバックグラウンドで実行する場合の通常の動作です。この場合、Sudoはパスワードを要求していますが、バックグラウンドで要求しているため、この事実を確認することはできません。確認するには、fgコマンドを使用して、ジョブをフォアグラウンドに戻す必要があります。

radu@Radu: ~ $ Sudo emacs tet.c &
[1] 7732
radu@Radu: ~ $ # now Sudo emacs run in background so you can't see nothing about what's happening
radu@Radu: ~ $ fg
[Sudo] password for radu:

この後、入力できます Ctrl+Z 必要に応じて、バックグラウンドでジョブを再度配置する。その後、再度「fg」コマンドを実行して、ジョブをフォアグラウンドに戻すことができます。

75
Radu Rădeanu

システムが現在のシェルに関連付けられているアクティブなジョブについて警告するため、メッセージが表示されます。

これらの実行中/停止中のジョブをリストするには、jobsを実行します。

その後、次のいずれかを実行できます。

  • fg(バックグラウンドのbgの反対)で最後のジョブをフォアグラウンドに移動します。
  • disownを実行して、これらのジョブを強制終了せずに現在のシェルから削除します。
  • を押してこれらのタスクを強制終了し、強制的にログアウトします Ctrl+D exit/logoutを2回入力するのと同じ2回
  • 以下を実行して、これらのジョブを手動で強制終了します:kill $(jobs -p)(強制的に-9を追加)
  • それらを否認し、停止したすべてのプロセスを強制終了する場合は、次を試してください。

    kill $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')


Sudoに関する質問に答えるために、パスワードを要求しません。これは、 標準入力 からパスワードを受信し、それをバックグラウンドで実行するためにアクティブな端末が必要であるためです。 、シェルはコマンドが終了するまで待機しないため、コマンドを操作する可能性はありません。

この場合、次の3つの可能性があります。

  • バックグラウンドに移行せずにコマンドを実行(&)、
  • Sudo -Sによって端末デバイスの代わりに標準入力からパスワードを読み取ります。

    echo mypass | Sudo emacs tet.c
    
  • visudoコマンドとsudoersファイルを編集して、パスワードを要求しないようにSudoを構成します。参照: ユーザーのNOPASSWDを有効にする

17
kenorb

停止したジョブがありますエラーが発生した場合:

  1. typejobs-->停止ステータスのジョブが表示されます
  2. exit-->と入力すると、ターミナルから出ることができます
5
santhosh kumar