procesy potomne a zakończenie procesu macierzystego

procesy potomne a zakończenie procesu macierzystego
MQ
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
0

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ć?

Azarien
trochę dużo tego "muszę". nie da się przerobić projektu?
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

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.

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

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.

edytowany 1x, ostatnio: n0name_l
MQ
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
0

@m0name_l - to jest typowe zadanie akademickie, proces macierzysty musi się zamknąć. @vpiotr, skorzystałem z Twojej rady - wszystko ładnie działa. Dzięki

0

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ć?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.