Как получить pid последней выполненной команды в сценарии оболочки?
Я хочу иметь сценарий оболочки следующим образом:
my-app &
echo $ my-app-pid
Но я не знаю, как получить pid только что выполненной команды.
Я знаю, что могу просто использовать команду jobs -p my-app
для grep pid. Но если я хочу выполнить оболочку несколько раз, этот метод не будет работать. Поскольку jobspec неоднозначен.
4 ответа
275
49
Получить PID
:
#! /Bin /Баш
my-app & echo $!
Сохранить PID
в переменной:
#! /Bin /Баш
my-app & экспорт APP_PID = $!
Сохраните все экземпляры PID
в текстовом файле:
#! /Bin /Баш
my-app & echo $! > > /tmp/my-app.pid
Сохраните вывод, ошибки и PID
в разделенных файлах:
#! /Bin /Баш
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)"
ответил Eduardo Cuomo 22 Jpm1000000pmFri, 22 Jan 2016 18:04:19 +030016 2016, 18:04:19
2
Попробуйте что-нибудь вроде
pidof my_app>> gt; /tmp/my_app.pid
ответил Piyush Jain 9 FebruaryEurope/MoscowbTue, 09 Feb 2016 19:24:10 +0300000000pmTue, 09 Feb 2016 19:24:10 +030016 2016, 19:24:10
-4
Попробуйте что-то вроде этого:
ps ef | grep "[m] y-app" | awk '{print $ 2}'
Размещение первой буквы вашего процесса между [
]
гарантирует, что вы не получите процесс grep
в своем списке. При необходимости вы также можете добавить grep в свое имя пользователя.
ответил Goez 30 Jpm1000000pmMon, 30 Jan 2012 15:42:52 +040012 2012, 15:42:52