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 функция.

Другие вопросы по тегам