2013-02-08 61 views
1

我有這個php函數檢查給定PID的腳本名稱,並將其與自身進行比較。Bash如何從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

比較是否有另一種bash命令對於Centos 6,它將返回我腳本的全名?

回答

2

您沒有指定什麼是你的操作系統,但在Ubuntu Linux操作系統,我可以看到腳本的全名與添加--context到PS呼叫:

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

操作系統是Centos 6 – user1105430

+0

- 上下文無效? – julumme

+0

--context返回文件名的整個路徑。這可以通過使用php basename()函數得到我的文件名,但好奇看看是否有更簡單的bash命令。 – user1105430

2

閱讀的PROC cmdline文件:

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

即將結束。它返回文件路徑,但不僅僅是文件名。我可以使用php basename()函數來獲取文件名,但想知道是否有另一種方法。 – user1105430

0

「ps」命令中似乎沒有標記或列表顯示沒有文件路徑的整個文件名或它被截斷。 PHP的basename()可以完成工作。

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