操作系统下的linux
进程的创建、阻塞 与中断
#include<sys/wait.h> #include<sys/types.h> #include<stdio.h> #include<stdlib.h> #include<signal.h> int main( void ) { pid_t childpid; int status; int retval; childpid = fork(); if(-1 == childpid) { perror("fork()"); exit( EXIT_FAILURE); } else if (0== childpid) { puts("In child process"); printf("子进程号= %d,子进程睡眠100秒\n",(int) getpid () ); sleep( 100 ); exit(EXIT_SUCCESS); } else { printf("父进程号 =%d,父进程等待子进程结束,若未结束则立即返回\n",(int)getpid()); if(0 == (waitpid(childpid, &status, WNOHANG)) )//立刻返回 { printf("杀死子进程当前的活跃进程\n"); retval = kill( childpid,SIGKILL); printf("父进程杀死子进程\n"); if( retval ) { puts("kill failed."); perror("kill" ); waitpid( childpid, &status, 0); } else { printf("%d killed \n",childpid); printf("杀死子进程后当前的活跃进程 \n"); } } } exit(EXIT_SUCCESS); }
中断运行的测试结果
wwq@wwq-VirtualBox:~$ gcc killer.c -o killer
killer.c: 在函数‘main’中:
killer.c:28:20: 错误: ‘childpit’未声明(在此函数内第一次使用)
killer.c:28:20: 附注: 每个未声明的标识符在其出现的函数内只报告一次
wwq@wwq-VirtualBox:~$ gcc killer.c -o killer
wwq@wwq-VirtualBox:~$ ./killer
父进程号 =1729,父进程等待子进程结束,若未结束则立即返回
杀死子进程当前的活跃进程
父进程杀死子进程
1730 killed
杀死子进程后当前的活跃进程
wwq@wwq-VirtualBox:~$ int kill(pid_t,int sig)
bash: 未预期的符号 `(' 附近有语法错误
wwq@wwq-VirtualBox:~$ gcc killer.c -o killer
wwq@wwq-VirtualBox:~$ ./killer
父进程号 =1740,父进程等待子进程结束,若未结束则立即返回
杀死子进程当前的活跃进程
父进程杀死子进程
1741 killed
杀死子进程后当前的活跃进程