3

指定されたPIDからスクリプトの名前をチェックし、それをそれ自体と比較するこのphp関数があります。

function isRunning($pid) {
    $filename = exec('ps -p '.$pid.' -o "%c"');
    $self = basename($_SERVER['SCRIPT_NAME']);
    return ($filename == $self) ? TRUE : FALSE;
}

私が知っていることから、私は通常、このコマンドを使用して PID からスクリプト名を取得します。

ps -o PID -o "%c"

ファイル名が返されますが、最初の 15 文字のみです。私のスクリプトの名前は

Daily_system_check.php

関数は常に FALSE を返します。

Daily_system_ch

スクリプトの完全な名前を返す Centos 6 用の別の bash コマンドはありますか?

4

3 に答える 3

2

--contextOSを指定していませんが、Ubuntu Linuxでは、ps呼び出しに追加することでスクリプトのフルネームを確認でき ます。

# ps -p 17165 --context
  PID CONTEXT                  COMMAND
17165 unconfined               /bin/bash ./testing_long_script_name.sh
# 
于 2013-02-08T02:26:03.300 に答える
2

proccmdlineファイルを読んでください:

cat /proc/$pid/cmdline | awk 'BEGIN {FS="\0"} {print $2}'
于 2013-02-08T02:26:20.587 に答える
0

「ps」コマンドには、ファイルパスやカットオフなしでファイル名全体を表示するためのフラグや列がないようです。PHP のbasename()が仕事を終わらせます。

function isRunning($pid) {
    $filename = basename(exec('ps -o cmd= '.$pid));
    $self = basename($_SERVER['SCRIPT_NAME']);
    return ($filename == $self) ? TRUE : FALSE;
}
于 2013-02-08T04:48:33.630 に答える