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