screen
過去にコマンドで開始されたいくつかのプロセスを開始しました。ほとんどのスクリプトの実行は完了しましたが、画面はまだアイドル状態のようです。すべてのプロセスを見ると見ることps aux | less
ができます。
screen
すべての項目を確認し、実行中のアクティブスクリプトがあるかどうかを確認できますか?
ありがとう
答え1
現在実行中の画面のリストを表示するには:
screen -list
画面名の最初の部分はPIDです。この親プロセスで作成された現在実行中のプロセスツリーを表示するには、次の手順を実行します。
pstree <PID>
または、より詳細な出力が必要な場合
pstree -a <PID> | less
画面に再接続する(または別の場所に接続している場合は切り離す)には、次の手順を実行します。
screen -rd <PID>
画面が不要になったと判断した場合は、画面を終了するためのいくつかのオプションがあります。現在画面に接続されている場合、Ctrl+をa使用するとk画面とすべてのウィンドウが終了します。
または、セッションに参加していない場合は、次のものを使用できます。
kill <PID>
screen -wipe <PID>
それを殺し、画面のリストから削除します。
答え2
screen
スクリプトが完了したら、シェルを終了してスクリプトの完了後にアイドル状態を維持するのを防ぎます。
script.sh; exit
または、エラーメッセージを表示するには:
script.sh && exit
これは正常に完了した場合screen
にのみ閉じます。script.sh
答え3
このパイプを使用すると、非アクティブ画面に対応するPIDのリストを取得できます。
screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$/\1/' | xargs -n1 pstree -p | sed -r 's/.*bash\(([0-9]+)\)$/\1/' | grep "^[0-9]*$"
たとえば、
> screen -list
There are screens on:
8988.pts-0.ubuntu-1gb-sfo1-01 (07/09/2018 09:02:14 PM) (Detached)
8960.pts-0.ubuntu-1gb-sfo1-01 (07/09/2018 09:01:40 PM) (Detached)
8927.pts-0.ubuntu-1gb-sfo1-01 (07/09/2018 09:01:02 PM) (Detached)
8903.pts-0.ubuntu-1gb-sfo1-01 (07/09/2018 09:00:42 PM) (Detached)
8857.pts-0.ubuntu-1gb-sfo1-01 (07/09/2018 08:59:30 PM) (Detached)
8831.pts-0.ubuntu-1gb-sfo1-01 (07/09/2018 08:59:01 PM) (Detached)
6 Sockets in /var/run/screen/S-user.
> screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$/\1/' | xargs -n1 pstree -p
screen(8988)───bash(8989)
screen(8960)───bash(8961)
screen(8927)───bash(8928)
screen(8903)───bash(8904)
screen(8857)───bash(8858)───python(8877)───{python}(8881)
screen(8831)───bash(8832)───python(8851)───{python}(8855)
最初の4つは非アクティブなので、次の方法で実行できるPIDを選択する必要があります。sed -r 's/.*bash\(([0-9]+)\)$/\1/' | grep "^[0-9]*$"
これの利点は、1行ですべての非アクティブ画面を終了できることです。
screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$/\1/' | xargs -n1 pstree -p | sed -r 's/.*bash\(([0-9]+)\)$/\1/' | grep "^[0-9]*$" | xargs -n1 kill