11 // ls should die by itself.
12 fprintf(stderr
, "starting ls...\n");
13 proc
.start("ls", "ls", "-F", "/", NULL
);
14 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
16 fprintf(stderr
, "done (%d/%d)...\n", proc
.running
, proc
.estatus
);
18 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
20 fprintf(stderr
, "done (%d/%d)...\n", proc
.running
, proc
.estatus
);
21 fprintf(stderr
, "\n\n");
23 // sleep should die after getting SIGTERM.
24 fprintf(stderr
, "starting sleep...\n");
25 proc
.start("sleep", "sleep", "10", NULL
);
26 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
28 fprintf(stderr
, "wait done (%d/%d)...\n", proc
.running
, proc
.estatus
);
29 fprintf(stderr
, "sending SIGTERM...\n");
32 fprintf(stderr
, "wait done (%d/%d)...\n", proc
.running
, proc
.estatus
);
33 fprintf(stderr
, "\n\n");
35 // sleep should die after getting SIGTERM, so proc.stop() shouldn't take
37 fprintf(stderr
, "starting sleep again...\n");
38 proc
.start("sleep", "sleep", "10", NULL
);
39 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
41 fprintf(stderr
, "wait done (%d/%d)...\n", proc
.running
, proc
.estatus
);
42 fprintf(stderr
, "sending SIGTERM...\n");
44 fprintf(stderr
, "stop done (%d/%d)...\n", proc
.running
, proc
.estatus
);
45 fprintf(stderr
, "\n\n");
47 // bash should refuse to die from SIGTERM, so we have to wait for SIGKILL.
48 fprintf(stderr
, "starting bash...\n");
49 proc
.start("bash", "bash", NULL
);
50 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
52 fprintf(stderr
, "wait done (%d/%d)...\n", proc
.running
, proc
.estatus
);
53 fprintf(stderr
, "stopping process...\n");
55 fprintf(stderr
, "stop done (%d/%d)...\n", proc
.running
, proc
.estatus
);
56 fprintf(stderr
, "\n\n");
58 // a process that backgrounds itself
59 fprintf(stderr
, "starting bash -c 'sleep 100 &'...\n");
60 proc
.start("bash", "bash", "-c", "sleep 100 &", NULL
);
61 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
63 fprintf(stderr
, "wait done (%d/%d)...\n", proc
.running
, proc
.estatus
);
64 fprintf(stderr
, "stopping process...\n");
66 fprintf(stderr
, "stop done (%d/%d)...\n", proc
.running
, proc
.estatus
);
67 fprintf(stderr
, "\n\n");
70 // a fancier process with subprocesses and helpful debug messages
71 fprintf(stderr
, "starting ./complex-proc.sh...\n");
72 proc
.start("./complex-proc.sh", "./complex-prox.sh", "XYZ", NULL
);
73 fprintf(stderr
, "started (%d/%d)...\n", proc
.running
, proc
.pid
);
75 fprintf(stderr
, "wait done (%d/%d/%d)...\n",
76 proc
.running
, proc
.estatus
, proc
.old_pids
.count());
77 fprintf(stderr
, "stopping process...\n");
78 proc
.stop(2000, false);
79 fprintf(stderr
, "stop done (%d/%d/%d)...\n",
80 proc
.running
, proc
.estatus
, proc
.old_pids
.count());
81 fprintf(stderr
, "start again...\n");
84 fprintf(stderr
, "wait done (%d/%d/%d)...\n",
85 proc
.running
, proc
.estatus
, proc
.old_pids
.count());
86 fprintf(stderr
, "stopping process...\n");
87 proc
.stop(1000, true);
88 fprintf(stderr
, "stop done (%d/%d/%d)...\n",
89 proc
.running
, proc
.estatus
, proc
.old_pids
.count());
90 fprintf(stderr
, "\n\n");
92 fprintf(stderr
, "Checking for leftover subprocesses...\n");
95 while ((pid
= ::waitpid(-1, &status
, 0)) > 0)
96 fprintf(stderr
, "LEFTOVER!! pid=%d, status=%d\n", pid
, status
);