2016-01-09 1 views
0

Предположим, у меня есть три довольно простых сценария.В KSH, как вы получите FIRST Parent ID, когда у вас два процесса?

script1 -> пробег->script2 -> пробег->script3.

и я хочу Script3, чтобы быть в состоянии сделать следующее:

echo "the PID of script1 is $PPID";

это, однако, последовательно выводит PID из script2. Есть ли способ работать так, чтобы он выдавал PID скрипта1?

ответ

0

Вы можете получить идентификатор процесса из родительского $PPID использованием $(ps -p $PPID -o ppid=)

Тогда для того, чтобы напечатать идентификатор процесса родителя родителя из Script3 вы можете использовать:

echo "the PID of script1 is $(ps -p $PPID -o ppid=)" 

Альтернативным использованием procfs:

echo "the PID of script1 is $(cat /proc/$PPID/stat | cut -d ' ' -f4)" 
+0

это работает до -o сейчас, теперь ps жалуется, что слишком много аргументов – driedupsharpie

+0

Я добавляю альтернативу с помощью procfs, если она включена. – mpromonet

0

Вы можете использовать это на вашем "с" сценарий:

echo "the PID of script1 is $(ps -hoppid $PPID | sed 's/ //g')" 

Вы запрашиваете команду ps, чтобы сообщить родительскому pid родительского pid вашей оболочки без заголовка, после чего вы удаляете пробелы из возвращаемого вывода.