2013-02-26 35 views
1

我試圖獲得用xvfb運行啓動的java進程的PID。當沒有xvfb運行時,我使用$!以獲得最後一個後臺進程的PID,但只要我使用xvfb-run,我顯然會得到xvfb-run的PID。從xvfb運行的java子進程獲取pid

下面是代碼:

#! /bin/bash 
logfile=/var/log/SleepTest.log 
pidfile=/var/run/SleepTest.pid 
command="java -jar /data/test/SleepTest.jar" 
(eval exec -c xvfb-run $command </dev/null>> $logfile 2>&1) & 
$! > $pidfile 

如果我刪除第二行最後的XVFB運行的一部分,一切工作正常(除部分,我沒有顯示器和程序崩潰) 。我可能必須玩「()」和「&」,但我不是專家。

該程序SleepTest.jar是我寫的一個小程序,所以我不必處理真實的事情。它只能睡2分鐘。

對於那些想知道爲什麼我使用xvfb-run的人,這是因爲我需要開始使用SWT的java應用程序,並且我的服務器上沒有顯示。

對於那些想知道爲什麼我需要的進程的PID,那是因爲我想創建一個init.d中的文件,以便能夠開始|停止|狀態我的應用程序

那麼,有沒有一種簡單的方法來獲得它呢?

+0

你可以用'ps -ef | grep SleepTest.jar |切... ...。你將不得不修補切割部分,因爲它在OS的不同之處。你可能想驗證父pid是你從$!獲得的pid ... – Lucas 2013-02-26 16:56:20

+0

我可能會後退到類似於如果我無法得到它「cleany」的東西。謝謝。 – user2108428 2013-02-26 17:39:32

+0

好的,用命令:ps -ef | grep SleepTest.jar | grep $! | sed -e'1d'| awk'{print $ 2}'> $ pidfile'我可以得到它。我會測試,以確保我總是得到好的(也只有一個)。再次感謝... – user2108428 2013-02-27 16:00:43

回答

-1

xvfb-run(例如xvfb-run name_of_script.sh)運行您的整個腳本,並從eval行中刪除xvfb-run行。