Linux-进程管理

本文出自<svtter.github.io>

进程的创建

用于进程的创建。fork()的作用是,从当前位置创建一个子进程,并执行。fork的返回值为子进程的pid

#include <stdio.h>
void main()
{
    int p1, p2;
    if (p1 = fork()) //父进程返回1, 子进程返回0
        putchar('b');
    else
    {
        if(p2 = fork())
            putchar('c');
        else
            putchar('a');
    }
}

运行结果

运行结果

进程的控制

在这段代码中使用了lockf, 和wait函数。作用是什么呢?

  • lockf顾名思义是锁定file. lockf(1, 1, 0)锁定资源,lockf(1, 0, 0)释放资源。

  • wait作用为等待子进程的返回信息。wait中的signal用于接受进程的返回信号,即exit(0)中的0

#include <stdio.h>
#include <wait.h>
// 利用lockf(1, 1, 0)锁定输出设备
// lockf(1, 0, 0)解锁输出设备
int main()
{
    int p1, p2, i;
    if(p1 = fork())
    {
        lockf(1, 1, );
        for(i = ; i < 500; i++)
            printf("parent%d\n", i);
        lockf(1, , );
        wait();        //confirm the father killed after child
        exit();
    }
    else
    {
        if(p2 = fork())
        {
            lockf(1, 1, );
            for(i = ; i < 500; i++)
            printf("son %d\n", i);
            lockf(1, , );
            wait();        //
            exit();
        }
        else
        {
            lockf(1, 1,);
            for(i = ; i < 500; i++)
                printf("grandchild%d\n", i);
            lockf(1, ,);
            exit();
        }
    }
}

运行结果

运行结果