Существует более простой способ того, что Вы делаете. Если Вы используете set -x
, сценарий автоматически повторит каждую строку, прежде чем это будет выполнено.
Кроме того, как только Вы выполняете другую команду, $?
заменяется кодом выхода той команды.
Необходимо будет поддержать его до переменной, если Вы собираетесь быть выполнением чего-нибудь с ним кроме быстрого тестировать-и-забывать. [
на самом деле программа, которая имеет ее собственный код выхода.
Например:
set -x # make sure the command echos
execute some command...
result="$?"
set +x # undo command echoing
if [ "$result" -ne 0 ]; then
echo "Your command exited with non-zero status $result"
fi
Попробуйте что-то вроде этого:
ps ef | grep "[m]y-app" | awk '{print $2}'
Размещение первой буквы процесса между [
]
удостоверяется, что Вы не добираетесь grep
обработайте в своем списке. В случае необходимости можно также добавить grep на имени пользователя.
my-app
выполняется несколько раз - davidshen84, конкретно волнует по поводу той аварии
– Mat
30.01.2012, 14:10
pgrep
вместо этого.
– Willem
19.01.2015, 14:41
Получите PID
:
#!/bin/bash
my-app &
echo $!
Сохраните PID
в переменной:
#!/bin/bash
my-app &
export APP_PID=$!
Сохраните все экземпляры PID
в текстовом файле:
#!/bin/bash
my-app &
echo $! >>/tmp/my-app.pid
Сохраните вывод, ошибки и PID
в разделенных файлах:
#!/bin/bash
my-app >/tmp/my-app.log 2>/tmp/my-app.error.log &
echo $! >>/tmp/my-app.pid
echo "my-app PID's: $(cat /tmp/my-app.pid)"
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
– sysfault 24 ноября '10 в 14:28 – imz -- Ivan Zakharyaschev 02.06.2015, 17:11echo $!
– Petr Gladkikh 26.07.2015, 08:21