У меня есть сценарий оболочки, который запускает Java-процесс p1, а также есть не-Java-процесс p2, который принимает входные данные от p1.
Как я могу получить идентификатор процесса p1?
У меня есть сценарий оболочки, который работает непредсказуемо (иногда работает, иногда нет). Я просмотрел сеть, но ни один из ответов не кажется идеальным.
Мой сценарий:
nohup sh -c "exec java p1 | p2 2>&1" &
$pid=`echo $!`
my_pid=exec ps -eo "%p %c %P" | awk -v p=$pid 'p==$3{print $1 $2}' | grep java | sed -e 's/java//'
echo "my_pid $my_pid"
p1
вp2
? - person Attila   schedule 19.05.2012job -p
- person S Kr   schedule 20.05.2012jobs -p
из-за того, что вы делаетеexec
. Точно сказать не могу. Однако есть и другие ответы, не связанные с именованными каналами илиjobs
. - person Tom Anderson   schedule 20.05.2012echo $!
. То есть, чтобы присвоить значение переменной, используйте: var=..., а не $var=... Также зачем возвращаться, почему бы не просто pid=$! ? - person inger   schedule 10.11.2013