Mam problem z Bashem i nie wiem dlaczego.
Pod skorupą wpisuję:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" to program w C do pobierania aktualnego pid, na przykład:
int main() { printf("%d", (int)getpid()); return 0; }
Co mnie wprawia w zakłopotanie, to to, że:
- Myślę, że „(polecenie)” jest podprocesem (czy mam rację?) I myślę, że jego pid powinien być inny niż jego nadrzędny pid, ale są takie same, dlaczego ...
- kiedy używam mojego programu do wyświetlania pid w nawiasach, pid, który pokazuje, jest inny, czy to prawda?
- czy „$$” przypomina makro?
Możesz mi pomóc?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
udowadnia, że tak. Okrągłe nawiasy tworzą podpowłokę. Instrukcje mogą zmieniać wartości zmiennych, a powłoka nadrzędna nie może widzieć tych zmian. Jest to realizowane jako fork()
operacja.
getpid
że pokaże inny identyfikator procesu, nawet jeśli nie został uruchomiony w podpowłoce.