PHPを使用してSSHでプログラムを起動したいのですが、PHPで画面を強制終了したいのですが、知っているのは画面の名前だけです。 (自動的に)画面IDを確認するにはどうすればよいですか?
環境変数$STY
を使用して、スクリーンセッションに参加しているかどうか、および内部にいるセッションの名前を判別できます。
最初は、スクリーンセッションの内部ではなく、ターミナルウィンドウに座っています。
$ echo $STY
$
画面セッションを起動します。
$ screen -ls
There is a screen on:
31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.
接続する:
$ screen -r 31543.tscrn
画面内セッション:
$ echo $STY
31543.tscrn
$
セッションの名前を使用すると、screen
を使用してセッションを強制終了できます。
$ screen -X -S tscrn kill
そこでも番号を使用できます。
$ screen -X -S 31543 kill
殺されたことを確認してください:
$ screen -ls
No Sockets found in /var/run/screen/S-saml.
screen
プログラムのことですか? screen -ls
は、実行中のPIDが前に付いた画面名と一緒に画面プロセスを一覧表示します。
screen -S foo
screen -ls
There are screens on:
8806.foo (09/08/13 20:05:22) (Attached)
これを使用してプロセスを強制終了できます。
kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')
あるいは、psでphpプロセスを識別できる場合、その親IDはscreenであり、それを強制終了できます。 pgrep -U <myusername> -f <name>
は、見つけたいphpプロセスを見つけるのに役立ちます(-f
は、コマンド引数とコマンド名を検索します)。複数のphpスクリプトを実行している可能性があるため、-f
は、プロセスに一致する優れたメカニズムになります。 <myusername>
はユーザー名、<name>
は、プロセスに一致する文字列です。次に、ps -p <pid> -o ppid=
スクリーンプロセスIDを取得し、それを強制終了します。
kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= )