进程的创建、阻塞 与中断

操作系统下的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
杀死子进程后当前的活跃进程

猜你喜欢

转载自blog.csdn.net/qq_37457202/article/details/79876175