web-dev-qa-db-ja.com

画面IDを確認する

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

8
TheWaveLad

環境変数$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.
10
slm

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= ) 
1
Drav Sloan