日期:2014-05-16  浏览次数:20708 次

Linux进程

?

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
    pid_t child_pid;
    child_pid = fork();	

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(0);
    } else {
        /*父进程工作*/
        printf("parent process PID:%d\n", (int)getpid());
        sleep(30);
        exit(0);
    }
}

?

#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
    pid_t child_pid, release_pid;
    child_pid = fork();	

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(0);
    } else {
        /*父进程工作*/
        release_pid = wait(NULL);
        printf("parent process PID:%d\n", (int)getpid());
        printf("I catched a child process with PID of:%d\n", release_pid);
        sleep(30);
        exit(0);
    }
}

?

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>

void handler(int num)
{
    int status;
    int pid = waitpid(-1, &status, WNOHANG);
    if (WIFEXITED(status)) 
        printf("The child %d exit with code %d\n", pid, WEXITSTATUS(status));
}

int main()
{
    pid_t child_pid;
    child_pid = fork();	

    signal(SIGCHLD, handler);

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(3);
    } else {
        /*父进程工作*/
        printf("parent process PID:%d\n", (int)getpid());
        int i;
        for (i = 0; i < 5; i++)
        {
            printf("do parent thing\n");
            sleep(3);
        }
        exit(0);
    }
}

?

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>

int main()
{
    pid_t child_pid, grandson_pid;
    child_pid = fork();	

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程*/
        grandson_pid = fork(); //创建孙进程
        if (child_pid < 0) 
            printf("Error occured on forking./n");
        else if (grandson_pid > 0)
        {
            printf("child process PID:%d\n", (int)getpid());
            exit(0); //子进程退出,孙进程由init领养
        } else {
            /*孙进程工作*/
            printf("grandson process PID:%d\n", (int)getpid());
            sleep(2);
            exit(0); //孙进程退出,init会为孙进程收尸
        }

    } else {
        /*父进程工作*/
        waitpid(child_pid, NULL, 0);//回收子进程
        printf("parent process PID:%d\n", (int)getpid());
        sleep(30);
        exit(0);
    }
}

?

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>

int main()
{
    pid_t child_pid;
    child_pid = fork();
	
    signal(SIGCHLD, SIG_IGN);

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(0);
    } else {
        /*父进程工作*/
        printf("parent process PID:%d\n", (int)getpid());
        sleep(30);
        exit(0);
    }
}

?

?