2015-02-02 2 views
0

У меня странная проблема, я не могу оторвать голову. Что я могу сделать, это запустить функцию под названием fn_rundumper, который в основном только вызывает код Баш:PID фоновой задачи отличается от заданной задачи PID с использованием ps

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 

Это дает ПИД 27938859. Это отличается от других!

Когда я убиваю ПИД-код 27938858, ничего не происходит. Когда я убиваю PID 27938859, тогда фон pterm закрыт.

Проблема в том, что я могу запустить много разных фоновых pterms, а также некоторые pterms, которые не открываются в качестве фоновых задач (т. Е. Выполняются отдельно). Поэтому, когда я прихожу на порядок, я просто хочу закрыть pterms, которые я открыл через мой скрипт.

Я пытался использовать jobs -l, чтобы увидеть PID, которые мне нужно закрыть, но, как я только что описал, это неправильный PID.

Может ли кто-нибудь объяснить, почему это происходит? а также что мне нужно сделать, чтобы получить правильный PID? Спасибо!

- Edit1 -

Лучшее, что я могу думать о том, чтобы сделать ps | grep pterm до и после того, как и сравнить результаты, чтобы найти новый pterm PID ... выполнимо, но некрасиво :(

- Edit2 -

Я проверил это снова в командной строке (без функции вызова):

Сначала я сделал:

`pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $PROJECT_DIR` & 

И затем посмотрел результаты ps/$! и получил то же поведение.

Тогда я сделал:

pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $VOE_PROJECT_DIR & 

т.е. удалены обратные тиков, теперь PIDs весь матч вверх! Я думаю, что я могу удалить back-ticks из своего кода, но я не совсем понимаю, что это такое!

+0

«Ничего не случилось», вероятно, означает, что вы убили чужой «pterm». – tripleee

ответ

2

Использование $() или backticks (подстановка команды) создает подоболочку. Таким образом, 27938858 является PID подоболочки, которая, в свою очередь, чернила pterm с PID 27938859.

В вашем примере замена команд кажется бесполезной, поэтому вы должны просто удалить ее.

+0

ах я вижу, спасибо очень :) –

Смежные вопросы