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


Bash how to get full script name from PID

我有一个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,因为它将自己与进行比较

每日_系统_小时

Centos 6是否还有另一个bash命令会返回脚本的全名?

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

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

读取proc cmdline文件:

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

在"ps"命令中似乎没有任何标志或collomn来显示整个文件名,而没有文件路径或文件名被截断。PHP的basename()完成了任务。

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