У мене проблеми з Башем, і я не знаю, чому.
Під оболонкою я ввожу:
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
він відображав би інший ідентифікатор процесу, навіть якщо він не запускався в підпакеті.