fork
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| fork [2015/09/22 17:00] – djbuldog | fork [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 5: | Řádek 5: | ||
| * proces pozná, zda je potomek nebo rodič, podle návratové hodnoty fork | * proces pozná, zda je potomek nebo rodič, podle návratové hodnoty fork | ||
| - | < | + | < |
| pid_t pid = fork(); | pid_t pid = fork(); | ||
| Řádek 38: | Řádek 38: | ||
| * systém pak ukončené potomky rovnou zapracovává | * systém pak ukončené potomky rovnou zapracovává | ||
| - | < | + | < |
| struct sigaction sa; | struct sigaction sa; | ||
| sa.sa_handler = SIG_IGN; | sa.sa_handler = SIG_IGN; | ||
| Řádek 48: | Řádek 48: | ||
| * vytvoříme potomka a v něm dalšího. | * vytvoříme potomka a v něm dalšího. | ||
| * prvního potomka zabijeme, čímž uděláme z potomka dalšího sirotka | * prvního potomka zabijeme, čímž uděláme z potomka dalšího sirotka | ||
| + | * tohle řešení se prý používá nejčastěji, | ||
| - | < | + | < |
| - | pid_t pid1, pid2; | + | pid_t pid1, pid2; |
| - | pid1 = fork(); | + | pid1 = fork(); |
| - | if (pid1 == -1) { | + | if (pid1 == -1) { |
| + | // fork failed | ||
| + | exit(1); | ||
| + | } | ||
| + | |||
| + | if (pid1 == 0) { | ||
| + | // child | ||
| + | pid2 = fork(); //second fork | ||
| + | if (pid2 == -1) { | ||
| // fork failed | // fork failed | ||
| exit(1); | exit(1); | ||
| - | } | + | } |
| - | if (pid1 == 0) { | + | if (pid2 == 0) { |
| // child | // child | ||
| - | pid2 = fork(); //second fork | + | ret = system(cmd); |
| - | if (pid2 == -1) { | + | exit(ret); |
| - | // fork failed | + | } |
| - | exit(1); | + | |
| - | } | + | |
| - | if (pid2 == 0) { | + | // parent |
| - | // child | + | exit(0); |
| - | ret = system(cmd); | + | } |
| - | exit(ret); | + | |
| - | } | + | |
| - | // parent | + | //parent |
| - | exit(0); | + | waitpid(pid1, & |
| - | } | + | |
| - | //parent | ||
| - | waitpid(pid1, | ||
| - | } | ||
| </ | </ | ||
fork.1442934021.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
