Uživatelské nástroje

Nástroje pro tento web


fork

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
fork [2015/09/22 17:00] djbuldogfork [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
  
-<code>+<code c>
 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á
  
-<code>+<code c>
 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, protože přináší další výhody jako odpojení stdin/out/err od mateřského procesu atd.
  
-<code> +<code c
- 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, &ret, 0);
-+
  
- //parent 
- waitpid(pid1, &ret, 0); 
-} 
 </code> </code>
fork.1442934021.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki