前言

杂烩

  1. int fork();

    创建进程。正确返回:等于0表示是子进程,大于0表示当前进程是父进程;错误返回:小于0,表示进程创建失败。

  2. int getpid();

    取得当前进程的标识符(进程ID)。

  3. int getppid();

    取得当前进程的父进程ID。

  4. int getpgrp();

    取得当前进程的组标识符。

  5. int getpid(int pid);

    将当前进程的组标识符改为当前进程的ID,使其成为进程组中的首进程,并返回这一新的组标识符。

  6. pid_t wait()/waitpid();

    wait()函数会使父进程暂停执行,直到它的一个子进程结束为止,返回值为子进程的PID;

    waitpid()用于等待某个特定进程的结束。

    在子进程结束前,wait()可以使调用者堵塞,而waitpid()可以通过选项使调用者不堵塞,wait()是waitpid()的一个特例。

  7. exit(int status);

    释放程序所占的资源并通知父进程删除,此时该进程处于僵死状态,status是调用进程终止时传递给其父s进程的值,若调用进程还有子进程,则将所有子进程的父进程改为1号进程。

  8. 信号量的函数都以sem_开头,线程中使用的基本信号量函数有4个,它们都声明在头文件semaphore.h中。

    int sem_init(sem_t *sem,int pshared,unsigned int value);

    该函数初始化由sem指向的信号对象,设置它的共享选项,并给它一个初始的整数值。
    pshared控制信号量的类型,如果其值为0,就表示这个信号量是当前进程的局部信号量,否则信号量就可以在多个进程之间共享,value为sem的初始值。调用成功时返回0,失败返回-1.

    int sem_init(sem_t *sem,int pshared,unsigned int value);

    该函数用于以原子操作的方式将信号量的值减1。原子操作就是,如果两个线程企图同时给一个信号量加1或减1,它们之间不会互相干扰。等待信号量,如果信号量的值大于0,将信号量的值减1,立即返回。如果信号量的值为0,则线程阻塞。相当于P操作。成功返回0,失败返回-1。sem指向的对象是由sem_init调用初始化的信号量。

    int sem_post(sem_t *sem);

    该函数用于以原子操作的方式将信号量的值加1。释放信号量,让信号量的值加1。相当于V操作。与sem_wait一样,sem指向的对象是由sem_init调用初始化的信号量。调用成功时返回0,失败返回-1.

    int sem_destroy(sem_t *sem);

    该函数用于对用完的信号量的清理。该函数用于对用完的信号量的清理。