进程控制

来源:互联网 发布:dokuwiki windows安装 编辑:程序博客网 时间:2024/06/05 18:20

1、进程标识

#include <unistd.h>pid_t getpid(void);     //返回值:调用进程的进程IDpid_t getppid(void);    //返回值:调用进程的父进程ID

2、进程等待

#include <sys/wait.h>pid_t wait(int *staloc);

功能:阻塞该进程,直到某个子进程退出

3、进程创建

#include <uinstd.h>pid_t fork(void);

功能:创建子进程
fork被调用一次,返回两次,有如下三种不同的返回值。
在父进程中:fork返回新创建的子进程的PID;
在子进程中:fork返回0;
若出错,fork返回-1.
子进程和父进程继续执行fork调用以后的指令。子进程是父进程的读本。例如,子进程获得父进程的的数据空间、堆和栈的副本。注意,这是子进程自己本身所拥有的副本。父进程和子进程并不同享这些存储空间部分。父进程和子进程共享正文段。

#include <unistd.h>pid_t vfork(void);

功能:创建子进程

demo:

#include <apue.h>#include <unistd.h>int main(int argc, char *argv[]){    pid_t pid = fork();    if (pid < 0){        err_sys("fork error!");        exit(1);    }    else if (pid == 0){        printf("child process ID = %d\n", getpid());    }    else {        wait(NULL);//等待子进退出        printf("parent process ID = %d\n", getppid());    }    return 0;

fork 和 vfork 的区别:
(1)、fork:子进程拷贝父进程的数据段
vfork:子进程与父进程共享数据段
(2)、fork:父、子进程的执行次序不确定
vfork:子进程先运行,父进程后运行

展示二者区别的demo:

#include <apue.h>#include <unistd.h>int main(int argc, const char *argv[]){    int counter = 0;    fork();    counter++;    printf("counter = %d\n", counter);    return 0;}

输出结果:

counter = 1counter = 1
#include <unistd.h>int main(int argc, const char *argv[]){    int counter = 0;    vfork();    counter++;    printf("counter = %d\n", counter);    return 0;}

输出结果:

counter = 1counter = 2

4、exec函数族

#include <unistd.h>int execl(const char *pathname, const char *arg0, ... ,const char *argn,  (char *)0);int execv(const char *pathbame, char *const argv[]);int execlp(const char *filename, const char *arg0, ... ,const char *argn,  (char *)0);int execvp(const char *filename, char *const argv[]);

demo

#include <apue.h>#include <unistd.h>int main(int argc, const char *argv[]){    execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *)0);    return 0;}
#include <apue.h>#include <unistd.h>int main(int argc, char *argv[]){    char *arg[] = {"ls", "-al", "/etc/passwd", (char *)0};    execv("/bin/ls", arg);    return 0;}
原创粉丝点击