欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

进程间通信之进程操作

C/C++ 迷途小书童 4年前 (2019-12-10) 1916次浏览 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)

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

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.