创建进程的两种方式

来源:互联网 发布:legoev3编程软件 编辑:程序博客网 时间:2024/06/07 02:24
fork:#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <errno.h>#include <signal.h>int main(void ){    int fd;    pid_t pid;    signal(SIGCHLD, SIG_IGN);    printf("befor fork pid:%d \n", getpid());int num = 10; //思考打印    fd = open("11.txt", O_WRONLY);    if (fd == -1)    {        return 0;    }    pid = fork();    if (pid == -1)      {        printf("pid < 0 err.\n");        return -1;    }    if (pid > 0)    {        printf("parent: pid:%d \n", getpid());        write(fd, "parent", 6);        close(fd);        //sleep(1);    }    else if (pid == 0)    {        printf("child: %d, parent: %d \n", getpid(), getppid());        write(fd, "child", 5);        close(fd);        //sleep(100);    }    printf("fork after....\n");    return 0;}vfork:#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <errno.h>#include <signal.h>int main01(void ){    pid_t pid;    int ret = 0;    printf("befor fork pid:%d \n", getpid());    int abc = 10;    pid = vfork(); //errno    if (pid == -1)      {        //printf("pid < 0 err.\n");        perror("tile");        return -1;    }    if (pid > 0)    {        printf("parent: pid:%d \n", getpid());    }    else if (pid == 0)    {        printf("child: %d, parent: %d \n", getpid(), getppid());        //printf("abc:%d\n", abc);        ret =  execve("./hello", NULL, NULL);        if (ret == -1)        {            perror("execve:");        }        printf("execve 测试有没有执行\n");            exit(0);        }    printf("fork after....\n");    return 0;}int main(void ){    pid_t pid;    int ret = 0;    printf("befor fork pid:%d \n", getpid());    int abc = 10;    pid = vfork(); //errno    if (pid == -1)      {        //printf("pid < 0 err.\n");        perror("tile");        return -1;    }    if (pid > 0)    {        printf("parent: pid:%d \n", getpid());    }    else if (pid == 0)    {        printf("child: %d, parent: %d \n", getpid(), getppid());        //printf("abc:%d\n", abc);        char *const argv[] = {"ls", "-l", NULL};        ret =  execve("/bin/ls", argv, NULL);        if (ret == -1)        {            perror("execve:");        }        printf("execve 测试有没有执行\n");            exit(0);        }    //printf("fork after....\n");    return 0;}
0 0