有关fork

来源:互联网 发布:车载手机支架 淘宝 编辑:程序博客网 时间:2024/06/06 12:45

今天又用到fork,真讨厌,每次用的时候都的查一次,这次记录一下,别老是忘记。

 

1) fork后执行命令

居然不会带参数的,这次记下,execlp为例:

            execlp("/bin/ls","/bin/ls","-l","/tmp/", NULL);

 

2) fork后进程的执行顺序

fork后顺序不定,有时父进程先执行,有时是子进程,看kernel的调度。

如果想让子进程先执行,方法好像好几个:

a) 使用vfork(),它可以保证子进程先执行

b) 父进程执行waitpid()

c) 父进程sleep(n)一会儿

 

不过我的目的是想保证下父进程先执行,没查到什么好办法,最后只能用子进程先sleep(n)一会儿的方法。

 

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

int main(int argc, char ** argv)
{
    pid_t pid;

    #if 1
    signal(SIGTTOU,SIG_IGN);
    signal(SIGTTIN,SIG_IGN);
    signal(SIGTSTP,SIG_IGN);
    signal(SIGHUP,SIG_IGN);
    #endif

    //pid = vfork(); //保证子进程先执行时
    pid = fork();
    if( pid == 0 )
    {
    sleep(5);
    printf ("子进程/n");
    pid = fork();
    //pid = vfork(); //保证子进程先执行时
    if (pid < 0){
        printf ("Error/n");
    }else if(pid > 0){
        printf ("子父进程/n");
        exit(0);

    }else{
        sleep(5);

        printf ("子子进程/n");
        execlp("/bin/ls","/bin/ls","-l","/tmp/", NULL);
        exit(0);
    }
    }else if(pid < 0){
        printf("Error/n");
    }else{
    printf ("父进程/n");
    }

    return 0;
}

原创粉丝点击