У меня проблема с Bash, и я не знаю почему.
Под оболочкой, я ввожу:получить pid в shell (bash)
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"GETPID" представляет собой программу C, чтобы получить текущий идентификатор процесса, как:
int main() { printf("%d", (int)getpid()); return 0; }
Что меня смущает, что:
- Я думаю, что «(команда)» является подпроцессом (я прав?), И я думаю, что его pid должен отличаться своим parent pid, но они одинаковы, почему ...
- Когда я использую свою программу для отображения pid между круглыми скобками, pid, который он показывает, отличается, правильно?
- «$$» что-то вроде макроса?
Помогите мне?
Обратите внимание, что 'getpid' будет показывать другой идентификатор процесса, даже если он не был запущен в подоболочке. – chepner
Независимо от других объяснений, относящихся к странице руководства bash и т. Д. Я бы поспорил, что '(xx)' фактически не вызывает отдельный процесс Linux (ни поток). Они были бы глупы, чтобы реализовать его таким неэффективным способом. – Marian