получить pid в оболочке (bash)
у меня проблема с Bash, и я не знаю, почему.
Под оболочкой я ввожу:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" - это программа C для получения текущего pid, например:
int main() { printf("%d", (int)getpid()); return 0; }
меня смущает вот что:
- я думаю, что "(команда) " является подпроцессом (я прав?), и я думаю, что его pid должен отличаться от своего родительского pid, но они одинаковы, почему...
- когда я использую свою программу, чтобы показать pid между скобками, pid это шоу-это другое, не так ли?
- это '$$' что-то вроде макроса?
вы можете мне помочь?
5 ответов:
$$
определяется для возврата идентификатора процесса родителя в подобласти; из справочной страницы в разделе "Специальные параметры":$ расширяется до идентификатора процесса оболочки. В подрешетке a () он расширяется до идентификатора процесса текущей оболочки, а не подрешетки.
на
bash
4, Вы можете получить идентификатор процесса ребенка сBASHPID
.~ $ echo $$ 17601 ~ $ ( echo $$; echo $BASHPID ) 17601 17634
вы можете использовать один из следующих.
$!
является PID последнего фонового процесса.kill -0 $PID
проверяет, работает ли он по-прежнему.$$
- это PID текущей оболочки.
- скобки вызова subshell в Баш. Так как это только подобласть, она может иметь тот же PID - зависит от реализации.
- программа C, которую вы вызываете, является отдельным процессом, который имеет свой собственный уникальный PID - не имеет значения, находится ли он в подрешетке или нет.
$$
- это псевдоним в Bash to текущий скрипт PID. Смотрите различия между$$
и$BASHPID
здесь, а прямо над этим дополнительные переменная$BASH_SUBSHELL
который содержит уровень вложенности.
если бы вы спрашивали, Как получить PID известной команды, это было бы похоже на что-то вроде этого:
Если вы дали команду ниже #Команда была выдана***
dd if=/dev/diskx of=/dev / disky
тогда вы бы использовали:
PIDs=$(ps | grep dd | grep if | cut -b 1-5)
что происходит здесь, это передает все необходимые уникальные символы в поле, и это поле можно повторить с помощью
echo $PIDs