Как получить pid последней выполненной команды в сценарии оболочки?

Я хочу иметь сценарий оболочки следующим образом:

my-app &
echo $ my-app-pid

Но я не знаю, как получить pid только что выполненной команды.

Я знаю, что могу просто использовать команду jobs -p my-app для grep pid. Но если я хочу выполнить оболочку несколько раз, этот метод не будет работать. Поскольку jobspec неоднозначен.

196 голосов | спросил davidshen84 30 Jpm1000000pmMon, 30 Jan 2012 15:34:08 +040012 2012, 15:34:08

4 ответа


275

Он находится в ! :

my-app &
echo $!
ответил enzotib 30 Jpm1000000pmMon, 30 Jan 2012 15:42:13 +040012 2012, 15:42:13
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

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132