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


62

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

たとえば、次のものを使用しemacssudo権限を持つファイルを開こうとするたびに:

sudo emacs tet.c &

パスワードを尋ねる代わりに、Ubuntu emacsemacsウィンドウやターミナルの出力なしでプロセスを開始するだけです(pidを除く)画像を参照してください(「&」を使用しない場合、パスワードを要求されます):

ここに画像の説明を入力してください

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

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

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

回答:


77

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

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

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」コマンドを実行して、ジョブをフォアグラウンドに戻すことができます。


私にとっては、常にtelnetです。私がすることを忘れてquit(参照:) superuser.com/questions/486496/how-do-i-exit-telnetを
cmroanirgo

1
そのため、Ctrl + dを2回(!)押したところ、最初のメッセージの後に同じメッセージが表示されました。私がちょうど殺した仕事が何であったかを理解する方法はありますか?
マツマス

19

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

以下を実行することにより、これらの実行中/停止中のジョブをリストできます:jobs

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

  • 最後のジョブをフォアグラウンドに移動する:(バックグラウンドのfg反対bg)、
  • 実行disownせずにこれらのジョブを削除せずに現在のシェルから削除します。
  • /を2回押すのCtrl+Dと同じように、2回押してこれらのタスクを強制終了して強制的にログアウトします。exitlogout
  • 次を実行してこれらのジョブを手動で強制終了します:(強制的に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にする


6

あなたが遭遇したときのジョブが停止しているエラー:

  1. タイプjobs->停止状態のジョブが表示されます
  2. そしてexit-> と入力すると、ターミナルから出ることができます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.