1

Примечание: я переместил это в переполнение стека, я думаю, что это правильное место: здесь

У меня странная проблема, я никак не могу разобраться. Я запускаю функцию с именем 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 ответ1

2

Происходит то, что вы создаете два процесса, первый - это функция вашей функции fn_rundumper , а второй - pterm открываемый вашей функцией. Таким образом, вызов вашей функции принимает pid, заканчивающийся на 858, а pterm вызываемый из вашей функции, принимает следующий после него pid, заканчивающийся на 859.

Что касается pid первого pterm , то это терминал, который вы использовали для выполнения своей функции. Вот почему его уничтожение уничтожит все созданное в нем (если вы не используете команду nohup ).

Чтобы увидеть тот же pid в команде ps , попробуйте:ps | grep run_dumper.sh , это pid скрипта bash, который запускает вашу функцию fn_rundumper .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .