欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

进程间通信之进程操作

C/C++ 迷途小书童 5年前 (2019-12-10) 2669次浏览 0个评论

进程是Linux程序设计中最重要的部分,它是一个正在执行的程序的映象。每个进程都包括程序代码和数据,其中数据包括程序变量数据、外部数据和程序堆栈等。

进程的创建

函数原型

#include <unistd.h>

pid_t fork(void);

如果调用成功,内核会新建一个新的进程,新产生的进程叫子进程,它是调用fork进程(称为父进程)的副本。它们俩拥有相同的变量及值,不过这些变量占用不同的地址空间。返回值是pid_t类型,是进程的唯一标识符,可以用来区别父子进程。在父进程中pid是一个非0的正整数,在子进程中pid的值为0。因此可以据此来给父子进程分配不同的工作。

进程的执行

函数原型

#include <unistd.h>

extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,
                  ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

exec系列函数调用用于新程序的运行。如果调用成功,父进程将被覆盖,然后从新程序的入口开始执行,这就产生了一个新进程,只不过这个进程的标识符pid是和父进程是一样的。上述函数声明中,参数pathfile的区别是:前者指向程序所在的路径名,后者指向的是一个简单的文件名。

进程的终止

函数原型

#include <unistd.h>

void _exit(int status);

参数status为进程的退出状态,返回值通常用于指出进程所完成任务的成败,0表示成功,否则出错。exit()除了实现进程的终止以外,还会关闭所有已经打开的文件及做一些系统清理的工作。

另外,函数void _exit(int status)也实现exit()一样的功能,在unistd.h中声明,只是它不做系统清除的工作。

喜欢 (0)

您必须 登录 才能发表评论!