3

我有这个 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 命令可以返回脚本的全名?

4

3 回答 3

2

您没有指定您的操作系统是什么,但在 Ubuntu Linux 中,我可以通过添加 --context到 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 回答