您的位置:首页 > 其它

fork创建进程

2015-11-18 23:17 239 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
pid_t child;
int count  = 100;
printf("Parrent process [%d] start...\n",getpid());
printf("Parrent [%d] start create child process:\n",getpid());
child = fork();
//fail
if(child < 0)
{
printf("Parrent process [%d] create child fail!\n",getpid());
printf("%s\n",strerror(errno));
return -1;
}
else if (child == 0)
{
printf("count = %d",++count);
printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid());
printf("child process [%d] finish,quit!\n",getpid());
exit(0);
}
else
{
sleep(1);
printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child);
}
printf("Only parrent do......[%d],count = [%d]\n",getpid(),count);
return 0;
}
-------------------------------------解决僵尸程----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
pid_t child;
int count  = 100;
printf("Parrent process [%d] start...\n",getpid());
printf("Parrent [%d] start create child process:\n",getpid());
child = fork();
//fail
if(child < 0)
{
printf("Parrent process [%d] create child fail!\n",getpid());
printf("%s\n",strerror(errno));
return -1;
}
else if (child == 0)
{
sleep(3);
printf("count = %d",++count);
printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid());
printf("child process [%d] finish,quit!\n",getpid());
exit(0);
}
else
{
//sleep(1);
wait();
printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child);
}
printf("Only parrent do......[%d],count = [%d]\n",getpid(),count);
return 0;
}
--------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>

void signal_handler(int sig_num)
{
switch(sig_num)
{
case SIGCHLD:
{
wait();
}
break;
}
}

int main(int argc,char *argv[])
{
pid_t child;
int count  = 100;
signal(SIGCHLD,signal_handler);
printf("Parrent process [%d] start...\n",getpid());
printf("Parrent [%d] start create child process:\n",getpid());
child = fork();
//fail
if(child < 0)
{
printf("Parrent process [%d] create child fail!\n",getpid());
printf("%s\n",strerror(errno));
return -1;
}
else if (child == 0)
{
sleep(3);
printf("count = %d",++count);
printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid());
printf("child process [%d] finish,quit!\n",getpid());
exit(0);
}
else
{
//sleep(1);
//wait();
while(1)
{
printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child);
sleep(1);
}
}
printf("Only parrent do......[%d],count = [%d]\n",getpid(),count);
return 0;
}
---------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>

void signal_handler(int sig_num)
{
switch(sig_num)
{
case SIGCHLD:
{
wait();
}
break;
}
}

int main(int argc,char *argv[])
{
pid_t child;
int count  = 100;
//signal(SIGCHLD,signal_handler);
printf("Parrent process [%d] start...\n",getpid());
printf("Parrent [%d] start create child process:\n",getpid());
child = fork();
//fail
if(child < 0)
{
printf("Parrent process [%d] create child fail!\n",getpid());
printf("%s\n",strerror(errno));
return -1;
}
else if (child == 0)
{
sleep(3);
printf("count = %d",++count);
printf("Child process [%d] ,parrent [%d]\n",getpid(),getppid());
child = fork();
if(child == 0)
{
while(1)
{
printf("child child [%d] [%d]\n",getpid(),getppid());
sleep(1);
}
}
else
{
printf("child process [%d] finish,quit!\n",getpid());
exit(0);
}
}
else
{
//sleep(1);
//wait();
while(1)
{
printf("Parrent process [%d] create child [%d] sucess\n",getpid(),child);
sleep(1);
}
}
printf("Only parrent do......[%d],count = [%d]\n",getpid(),count);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: