Tworzę proces potomny za pomocą fork()
. W jaki sposób proces nadrzędny może zabić proces potomny, jeśli proces potomny nie może zakończyć jego wykonania w ciągu 30 sekund? Chcę zezwolić procesowi potomnemu na wykonanie do 30 sekund. Jeśli zajmie to więcej niż 30 sekund, proces nadrzędny go zabije. Czy masz jakiś pomysł, aby to zrobić?Jak zabić proces potomny przez proces nadrzędny?
Odpowiedz
Wyślij SIGTERM lub SIGKILL do niego:
http://en.wikipedia.org/wiki/SIGKILL
http://en.wikipedia.org/wiki/SIGTERM
SIGTERM jest uprzejmy i umożliwia proces czyszczenia, zanim przejdzie, natomiast SIGKILL jest wtedy, gdy nie będzie słuchać> :)
przykład z powłoki (strona człowieka: http://unixhelp.ed.ac.uk/CGI/man-cgi?kill)
kill -9 PID
W C, można zrobić to samo przy użyciu syscall zabijać
kill(pid, SIGKILL);
zobacz następującą stronę Man: http://linux.die.net/man/2/kill
W procesie macierzystym, widelec Wartością zwracaną przez() jest identyfikator procesu procesu potomnego. Rzeczy, które wartościują gdzieś, gdy trzeba zakończyć proces potomny. fork() zwraca zero (0) w procesie potomnym.
Gdy trzeba przerwać proces potomny, należy użyć funkcji kill (2) z identyfikatorem procesu zwróconym przez fork() i sygnałem, który ma zostać dostarczony (np. SIGTERM).
Pamiętaj, aby wywołać funkcję wait() w procesie potomnym, aby zapobiec pozostawaniu zombi.
Spróbuj czegoś takiego:
#include <signal.h>
pid_t child_pid = -1 ; //Global
void kill_child(int sig)
{
kill(child_pid,SIGKILL);
}
int main(int argc, char *argv[])
{
signal(SIGALRM,(void (*)(int))kill_child);
child_pid = fork();
if (child_pid > 0) {
/*PARENT*/
alarm(30);
/*
* Do parent's tasks here.
*/
wait(NULL);
}
else if (child_pid == 0){
/*CHILD*/
/*
* Do child's tasks here.
*/
}
}
- 1. Jak zabić proces uruchamiany przez wątek potomny?
- 2. Leiningen - jak zabić proces potomny?
- 3. Jak zabić proces nohup?
- 4. Jak zabić proces C#?
- 5. jak zabić proces uWSGI
- 6. Proces automatycznego zabijania i proces potomny wieloprocesorowego puli
- 7. Jak zabić proces w cygwin?
- 8. Jak zabić proces z WiX
- 9. Jak zabić proces w kosmosie
- 10. Spawn proces potomny w Electron
- 11. Jak zabić nieużywany proces w systemie Android?
- 12. jak zakończyć proces potomny - _exit() vs. zjazdu
- 13. Jak odłączyć proces potomny w skrypcie Node.js?
- 14. Proces potomny dla zadania intensywnego procesora?
- 15. Jak zabić konkretną zakładkę/proces chrome
- 16. Jak zabić proces nodejs w Linuksie?
- 17. Jak zabić proces kreślenia w R?
- 18. Opis SIGCHLD, gdy proces potomny kończy się
- 19. jak zabić proces i procesy potomne z Pythona?
- 20. Automatycznie dołącz proces potomny do debuggera
- 21. C++: używanie cin na proces potomny
- 22. MYSQL: Aby zabić proces przy użyciu sys_exec()
- 23. Proces zabity przez SIGKILLa
- 24. Java. Proces prowadzona przez Runtime.getRuntime() Zabij exec()
- 25. Jak zabić proces w tle z funkcji systemowej zadzwoń
- 26. Jak uzyskać identyfikator procesu, aby zabić proces nohup?
- 27. Jak zabić proces w Javie, biorąc pod uwagę konkretny PID
- 28. Jak zabić/zakończyć cały uruchomiony proces na Sql Server 2008
- 29. Jak zabić proces w pojemniku? Polecenie Docker top
- 30. Jak zabić proces na komputerze zdalnym za pomocą wmi
Czy muszę zresetować alarm ('alarm (0)') w ramach nadrzędnej, jeśli dziecko wykonuje przed upływem 30 sekund? – miraj
@miraj Witam, czy masz rozwiązanie, aby anulować alarm? Mam podobne pytanie, piszę klienta/serwer gniazda, serwer rozwidla proces potomny, gdy klient gniazda prosi o połączenie, ale jeśli dziecko nie wyśle żadnej wiadomości w ciągu 1 minuty, serwer zabije proces potomny. Jeśli klient wyśle wiadomość na serwer, licznik zostanie ponownie ustawiony na 1 minutę. –