linux进程参考fork 和 execl

参考例程如下:

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

void task_2(void *param) 
{
    int i = 10;
    while(i)
    {
        printf("this is task 2 runing\n");
        sleep(1);
        i--;
    }
    exit(0);
}

void main(void)
{
    int i = 10;
    pid_t task_id = fork();
    if(task_id == 0)  //0是当前的新进程,子进程
    {
        printf("child ret is %d\n", task_id);
        printf("child id is %d, parent id is %d", getpid(), getppid());

        //ececl("/dev/ls", "-l", NULL); //第一个参数是个路径,程序名,而不是函数,思考的方向错误
        execl("/bin/ls", "ls", "-a", NULL);
        if(execl("/bin/ls", "ls", "-a", NULL) == -1)
        {
            perror("execl error");
            exit(0);
        }
    }
    else if(task_id == -1)
    {
        perror("fork error");
        return -1;
    } 
    else if(task_id > 0) //父进程
    {
        printf("parent ret is %d\n", task_id);
        printf("parent id is %d, parent+parent id is %d", getpid(), getppid());

        waitpid(task_id, NULL, 0);
        printf("chind is over\n");
    }

    while(i)
    {
        printf("this is task 1 runing\n");
        sleep(1);
        i--;
    }
}

 

posted @ 2025-06-12 17:36  429512065  阅读(8)  评论(0)    收藏  举报