Učenie o vidlicovaní s C.
Môžem splodiť detský proces fork()
poriadku. Predpokladajme, že vykonáva nejaký výpočet. Keď sa robí výpočet, ja "d rád, že zomrieť a vrátiť výsledok (niektoré int
) materskej spoločnosti. Ako sa to dá urobiť?
Za normálnych okolností som odoslal kód môjho postupu, ale to je doslova:
int main () {
pid_t pid = fork();
if (pid == 0) {
// I"m a child!
int calculation = 10 + 10;
// <----- Return 20 to the parent?
}else{
// I am the parent, and I am waiting to receive a 20
}
exit(0);
}
odpovede:
1 pre odpoveď č. 1Nemôžete to urobiť, pretože exit
udáva iba výstupný kód (ktorý by mal byť zvyčajne EXIT_SUCCESS
a má len 7 bitov). A výstupný kód je jediná vec, ktorú proces vracia (pozri waitpid (2), ktoré by ste mali vždy zavolať, aby ste sa vyhli zombie procesy).
Mohli by ste mať rodičovský a podriadený proces používať nejakú zdieľanú pamäť a semafory (pozri shm_overview (7) & sem_overview (7)), ale je to zložité, takže nie je vhodné pre váš prípad.
Najjednoduchšia a pravdepodobne najrýchlejšia cesta je len na použitie potrubie (7)-s (bude zriadené pred fork
) a nechať dieťa proces vytlačiť na jeho stdout potrubia a rodičovský proces na potrubí. vidieť potrubie (2) a tiež popen (3).
Možno budete chcieť fork
niekoľko paralelne spracúva procesy (najviac tucet na pracovnej ploche). Potom musíte "multiplexovať svoje vstupy do potrubia. Na to máte nejakú slučku udalostí a použitie." poll (2) v rodičovskom procese pre multiplexovanie.
Prečítajte si tiež Pokročilé programovanie Linuxu
1 pre odpoveď č. 2
Okrem potrubia a vidlice je najjednoduchšou metódou použiť popen () a čítať odpoveď dieťaťa na stdout ako prúd SÚBOROV.
Nemusíte sa zaoberať vidličkou vôbec. (Aj keď sa topoľ realizuje na vrchole vidlice a rúry a dup2).
pclose () môže byť použitý na kontrolu výstupného statusu dieťaťa.