PHPを使用してSSHでプログラムを起動したいのですが、PHPで画面を強制終了したいのですが、知っているのは画面の名前だけです。(自動的に)画面IDを確認するにはどうすればよいですか?
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= )
screen
またはDISPLAY
?