後で確認できるように画面内でジョブを実行中のままにすることが多いですが、時には画面内でどのコマンドが実行されているかを確認する必要がある場合もあります。通常、次のようなPHPスクリプトの一種です。
screen -d -m nice -n -10 php -f convertThread.php start=10000
どの画面でどのコマンドを実行しているかは記録しませんが、プロセスを終了せずに画面で実行されているコマンドを調べて進行状況を確認したいと思います。
画面のヘルプページにオプションは表示されません。
答え1
私は最近これをしなければなりませんでした。スタックオーバーフローで私はどのように答えたか画面で実行中のプロセスのPIDを見つけます。。 PIDがある場合は、ps
それを使用してコマンドを取得できます。その回答の内容とあなたの状況に関する追加の内容は次のとおりです。
次のようにスクリーンセッションのPIDを取得できます。
$ screen -ls
There are screens on:
1934.foo_Server (01/25/15 15:26:01) (Detached)
1876.foo_Webserver (01/25/15 15:25:37) (Detached)
1814.foo_Monitor (01/25/15 15:25:13) (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
foo_Monitor
スクリーンセッションでBashで実行されているプログラムのPIDが欲しいとしましょう。スクリーンセッションのPIDを使用して、既知のPIDのPPID(親PID)を検索して、そのセッションでfoo_Monitor
実行されているセッションのPIDを取得します。bash
$ ps -el | grep 1814 | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1815 1814 0 80 0 - 5520 wait pts/1 00:00:00 bash
次にセッションのPIDを取得しますbash
。
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
今、私たちが望むプロセスはそれPID。コマンドを入れ子にするだけです。今回はフラグを使用して-v
プロセスgrep bash
を取得します。いいえ大きな打撃:
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
このPIDを使用してコマンドを見つけることができます(2行目の終わりを参照)。
$ ps u -p 23869
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ? Sl Feb02 1147:09 /usr/lib/foo
一緒に入れてください:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
答え2
screen -S <your-fancy-name>
実行されるコマンドに従ってスクリーンセッションに意味のある名前を付けるにはどうすればよいですか?名前が一覧表示され、screen -ls
回復セッションに使用されますscreen -r <your-fancy-name>
。
以下を追加するように編集されました。
前回はそれが私の注目を集めたからです。あなたのニーズに合った機能を追加して、tmux
まったく同じ機能セット(それほど多くはありませんが)を提供します。screen
よくある質問では、「tmuxはエスケープシーケンスを使用して、深刻なハッキングなしで実行中のアプリケーションのウィンドウ名を自動的に変更することをサポートしています。デフォルトではオンになっています。」