PID фоновой задачи отличается от PID указанной задачи с помощью ps
Примечание: я переместил это в переполнение стека, я думаю, что это правильное место: здесь
У меня странная проблема, я не могу разобраться. Я запускаю функцию fn_rundumper, которая в основном просто вызывает код bash: 'pterm -z "cmd.sh" param1 &'
Вот вывод того, что включает фоновый pid "27938858":
fn_rundumper
running fn_dumper...
[1] 27938858
fn_dumper...done
Затем я смотрю на рабочие номера, которые выполняются, это также показывает PID "27938858":
jobs -l
[1] + 27938858 Running $(pterm -z "$SCRIPTS_DIR/run_dumper.sh" $VO
Затем я делаю команду ps, чтобы увидеть, какие запущены pterms:
ps | grep pterm
24285189 ? 00:00:00 pterm
27938859 ? 00:00:00 pterm
Это дает PID "27938859". Это отличается от других!
Когда я убиваю PID 27938858, кажется, ничего не происходит. Когда я убиваю PID 27938859, фоновый pterm закрывается.
Проблема в том, что я могу захотеть запустить много разных фоновых программ, а также некоторые, которые не открываются как фоновые задачи (то есть запускаться отдельно). Поэтому, когда я прихожу в порядок, я просто хочу закрыть открытые мне с помощью моего скрипта.
Я пытался использовать задания -l, чтобы увидеть PID, которые мне нужно закрыть, но, как я только что описал, это неправильный PID.
Кто-нибудь может объяснить, почему это происходит? а также что мне нужно сделать, чтобы получить правильный PID? Спасибо!
- edit - Лучшее, что я могу придумать, это сделать 'ps | grep pterm 'до и после и сравните результаты, чтобы найти новый pterm PID... выполнимо, но безобразно:(
1 ответ
То, что происходит, заключается в том, что вы создаете два процесса, первый из которых выполняет свою функцию fn_rundumper
и второй pterm
открыт вашей функцией. Таким образом, ваш вызов функции принимает pid, заканчивающийся на 858, и pterm
Вызванный из вашей функции следующий за ним pid, заканчивающийся на 859.
Что касается пид первого pterm
это терминал, который вы использовали для выполнения своей функции. Вот почему его уничтожение убьет все, что в нем создано (если вы не используете nohup
команда).
Чтобы увидеть тот же пид в ps
команда, попробуйте:ps | grep run_dumper.sh
, который является pid скрипта bash, который запускает ваш fn_rundumper
функция.