Mam zadanie w którym muszę uruchomić trzy procesy potomne i natychmiast po tym mój proces macierzysty musi się zakończyć. Problem polega na tym, że do pierwszego procesu potomnego muszę podawać tekst ze standardowego wejścia już po zakończeniu procesu macierzystego - w takiej sytuacji powłoka przejmuje terminal i wejście w procesie potomnym nie działa.
Co z tym fantem zrobić?
To jest w poprzek idei "standardowego we/wy".
Dla przypomnienia, zastępuje ona potrzebę wymiany danych pomiędzy procesami przy pomocy plików.
Jeśli proces źródłowy się zamyka, to użyj pliku jako nośnika danych. Lub MSMQ lub bazy danych.
Dodam jeszcze, ze zamkniecie procesu macierzystego nic tak naprawde nie daje. Mozesz go uspic wywolujac funkcje wait(pid)
w oczekiwaniu na zamkniecie procesu korzystajacego z terminala i po tym zakonczyc jego dzialanie. Uspiony proces nie wykonuje zadnej pracy, ani w zadnym stopniu nie obciaza procesora. Jadro go obudzi dopiero po spelnieniu wymaganych okolicznosci, w tym przypadku zamkniecie procesu potomnego.
Jednak jak chcialbys sie pobawic, to kombinuj.
http://man7.org/linux/man-pages/man4/tty_ioctl.4.html
http://linux.die.net/man/3/tcsetpgrp
http://man7.org/linux/man-pages/man2/setpgid.2.html
Mimo wszystko, z gory uprzedze, ze nie jest to takie proste, jesli chcialbys to poprawnie zaimplementowac.
@m0name_l - to jest typowe zadanie akademickie, proces macierzysty musi się zamknąć. @vpiotr, skorzystałem z Twojej rady - wszystko ładnie działa. Dzięki
Wiem że odświeżam stary wątek, ale mam ten sam problem. Mam dwa procesy powoływane z porocesu macierzystego, i bufor współdzielony.Macierzysty zostaje zamkniety Od razu po zainicjalizowaniu. Jeden czyta z konsoli dane, drugi je wypisuje z buforu. I mam problem z tym że przy zamknieciu macierzystego nie mogę przesłać danych z konsoli. Plik też wydaje mi sie bez sensu bo od tego mam bufor. Macie może jakiś pomysł jak to rozwiązać?