指定されたプロセスが現在PHPを介して実行されているかどうかを確認したいと思います。
単にPIDを提供し、それが現在実行中かどうかを確認したいと思います。
PHPは、この情報を提供する内部関数を持っていますか、または「ps」出力から解析する必要がありますか?
Linuxを使用している場合は、これを試してください:
if (file_exists( "/proc/$pid" )){
//process with a pid = $pid is running
}
posix_getpgid($pid);
は、プロセスが実行されていないときにfalseを返します
そのための機能が必要な場合:
$running = posix_kill($pid,0);
プロセス識別子pidを使用して、シグナルsigをプロセスに送信します。
呼び出し posix_kill
0のkillシグナルは、プロセスが実行されている場合はtrue
を返し、そうでない場合はfalse
を返します。
Shell_exec
を使用してbashスクリプトを呼び出します
$pid = 23818;
if (Shell_exec("ps aux | grep " . $pid . " | wc -l") > 0)
{
// do something
}
posix_kill(posix_getpgrp(), 0)
は、PIDが実行されているかどうかを確認する最良の方法だと思います。Windowsプラットフォームでは利用できません。
シェルの_kill -0 PID
_、およびPHPのShell_exec('kill -0 PID')
と同じですが、pidが存在しない場合はエラーは出力されません。
分岐した子プロセスでは、_posix_getpgid
_は、親が終了した場合でも常に親のpidを返します。
_<?php
$pid = pcntl_fork();
if ($pid === -1) {
exit(-1);
} elseif ($pid === 0) {
echo "in child\n";
while (true) {
$pid = posix_getpid();
$pgid = posix_getpgid($pid);
echo "pid: $pid\tpgid: $pgid\n";
sleep(5);
}
} else {
$pid = posix_getpid();
echo "parent process pid: $pid\n";
exit("parent process exit.\n");
}
_
私はこのためのスクリプトを作成しました。これはin wordpressを使用してゲームサーバーのステータスを表示しますが、これはサーバーで実行中のすべてのプロセスで動作します
<?php
//##########################################
// desc: Diese PHP Script zeig euch ob ein Prozess läuft oder nicht
// autor: seevenup
// version: 0.2
//##########################################
if (!function_exists('server_status')) {
function server_status($string,$name) {
$pid=exec("pidof $name");
exec("ps -p $pid", $output);
if (count($output) > 1) {
echo "$string: <font color='green'><b>RUNNING</b></font><br>";
}
else {
echo "$string: <font color='red'><b>DOWN</b></font><br>";
}
}
}
//Beispiel "Text zum anzeigen", "Prozess Name auf dem Server"
server_status("Running With Rifles","rwr_server");
server_status("Starbound","starbound_server");
server_status("Minecraft","minecarf");
?>
詳細はこちら http://umbru.ch/?p=328
以下がその方法です。
if (`ps -p {$pid} -o comm,args=ARGS | grep php`) {
//process with pid=$pid is running;
}
$pid = 12345;
if (Shell_exec("ps ax | grep " . $pid . " | grep -v grep | wc -l") > 0)
{
// do something
}
//For Linux
$pid='475678';
exec('ps -C php -o pid', $a);
if(in_array($pid, $a)){
// do something...
}