代码:
//g++ main.cpp -o main
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <iostream>
#include <assert.h>
using namespace std;
int main () {
pid_t pid,wait_pid;
int status;
do {
if ((pid = fork()) < 0) {
cout << "error" << endl;
} else if (pid == 0) {
cout << "child_pid:" << getpid() << endl;
sleep(2);
execvp("./sub",0);
} else {
cout << "parent_pid:" << getpid() << endl;
w = waitpid(pid,&status,0);
cout << "w:" << w << " status:" << status << endl;
}
} while (134 == status);
cout << "the end" << endl;
return 0;
}
//g++ sub.cpp -o sub
#include <unistd.h>
#include <iostream>
#include <assert.h>
using namespace std;
int main () {
cout << "sub child_pid:" << getpid() << endl;
assert(1 < 0);
return 0;
}
执行及结果:
#./main
parent_pid:29905
child_pid:29906
sub pid:29906
sub.cpp:7:int main():Assertion '1<0' failed.
w:29906 status:134
parent_pid:29905
child_pid:29908
sub pid:29908
sub.cpp:7:int main():Assertion '1<0' failed.
w:29908 status:134
parent_pid:29905
child_pid:29913
sub pid:29913
sub.cpp:7:int main():Assertion '1<0' failed.
w:29913 status:134
... ...