fork(1) download
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/types.h>
  5.  
  6. int glob = 6;
  7. char buf[] = "a write to stdout\n";
  8.  
  9. void print_err(char *msg, int n) {
  10. write(STDOUT_FILENO, msg, n);
  11. exit(1);
  12. }
  13.  
  14. int main() {
  15. int var;
  16. pid_t pid;
  17.  
  18. var = 88;
  19.  
  20. if(write(STDOUT_FILENO, buf, sizeof(buf) - 1) != sizeof(buf) - 1)
  21. print_err("write error\n", 12);
  22.  
  23. printf("before fork\n");
  24.  
  25. if((pid = fork()) < 0)
  26. print_err("fork error\n", 11);
  27. else if(pid == 0) {
  28. glob++;
  29. var++;
  30. printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
  31. if((pid = fork()) < 0) print_err("fork error\n", 11);
  32. if(pid == 0) {
  33. glob++;
  34. var++;
  35. printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
  36. if((pid = fork()) < 0) print_err("fork, error\n", 11);
  37. if(pid == 0) {
  38. glob++;
  39. var++;
  40. printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
  41. } else {
  42. sleep(1);
  43. }
  44. } else {
  45. sleep(2);
  46. }
  47. } else {
  48. sleep(3);
  49. }
  50.  
  51. printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
  52. exit(0);
  53. }
  54.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
a write to stdout
before fork
pid = 29334, glob = 7, var = 89
pid = 29335, glob = 8, var = 90
pid = 29336, glob = 9, var = 91
pid = 29336, glob = 9, var = 91
before fork
pid = 29334, glob = 7, var = 89
pid = 29335, glob = 8, var = 90
pid = 29335, glob = 8, var = 90
before fork
pid = 29334, glob = 7, var = 89
pid = 29334, glob = 7, var = 89
before fork
pid = 29271, glob = 6, var = 88