枝wenz_fpJNR0 的学生作业:
#include
#include
#include
#include
#include
#include
int main(int argc, char const *argv[])
{
pid_t cpid;
cpid=fork();
if(cpid == -1){
perror("[ERROR] fork()");
exit(EXIT_FAILURE);
}else if(cpid == 0){
// 子进程
fprintf(stdout,"子进程ID1: %d 正在运行.\n", getpid());//打印子进程ID
raise(SIGSTOP);//发送SIGSTOP信号,使子进程暂停
fprintf(stdout,"子进程ID1: %d 已暂停.\n", getpid());//打印子进程ID
exit(EXIT_SUCCESS);
}else if (cpid > 0)
{
int ret;
sleep(1);//等待1秒,确保子进程先暂停
printf("父进程发送 SIGKILL 给子进程1 (PID: %d)\n", cpid);
ret=kill(cpid,SIGKILL);//发送SIGKILL信号,使子进程终止
if (ret == 0) {
printf("子进程1 (PID: %d) 已被终止.\n", cpid);
} else {
perror("kill 子进程1 失败");
}
waitpid(cpid, NULL, 0);//等待子进程结束
// 创建子进程2
cpid = fork();
if(cpid == -1){
perror("[ERROR] fork()");
exit(EXIT_FAILURE);
}else if(cpid == 0){
// 子进程2
fprintf(stdout,"子进程2 ID: %d 正在运行.\n", getpid());//打印子进程2 ID
raise(SIGSTOP);//发送SIGSTOP信号,使子进程2暂停
fprintf(stdout,"子进程2 ID: %d 已暂停.\n", getpid());//打印子进程2 ID
exit(EXIT_SUCCESS);
}else if (cpid > 0)
{
// 父进程
sleep(1);//等待1秒,确保子进程2先暂停
printf("父进程发送 SIGKILL 给子进程2 (PID: %d)\n", cpid);
ret = kill(cpid, SIGKILL);//发送SIGKILL信号,使子进程2终止
if (ret == 0) {
printf("子进程2 (PID: %d) 已被终止.\n", cpid);
} else {
perror("kill 子进程2 失败");
}
waitpid(cpid, NULL, 0);//等待子进程2结束
fprintf(stdout,"父进程 ID: %d 退出.\n", getpid());//打印父进程 ID
exit(EXIT_SUCCESS);
}
}
return 0;
}