Bash如何从PID获取完整的脚本名称

时间:2013-02-08 02:15:25

标签: php bash ps

我有这个php函数,它从给定的PID中检查脚本的名称,并将其与自身进行比较。

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命令会返回脚本的全名?

3 个答案:

答案 0 :(得分:2)

您没有指定您的操作系统是什么,但在Ubuntu Linux中,我可以看到脚本的全名,并在ps调用中添加--context

# ps -p 17165 --context
  PID CONTEXT                  COMMAND
17165 unconfined               /bin/bash ./testing_long_script_name.sh
# 

答案 1 :(得分:2)

阅读proc cmdline文件:

cat /proc/$pid/cmdline | awk 'BEGIN {FS="\0"} {print $2}'

答案 2 :(得分:0)

“ps”命令中似乎没有标志或列来显示没有文件路径的整个文件名或它被切断。 PHP的basename()完成了工作。

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