У меня проблема с 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, который она показывает, отличается, это правильно?
- "$$" что-то вроде макроса?
Можешь мне помочь?
getpid
будет отображать другой идентификатор процесса, даже если он не был запущен в подоболочке. - person chepner   schedule 11.01.2014echo $$ $BASHPID ; ( echo $$ $BASHPID )
демонстрирует, что это так. Круглые скобки образуют подоболочку. Операторы могут изменять значения переменных, и родительская оболочка не должна видеть эти изменения. Это реализовано какfork()
операция. - person Ben   schedule 18.01.2020