Linux 多进程、多线程编程基础

您所在的位置:网站首页 linux线程进程面试 Linux 多进程、多线程编程基础

Linux 多进程、多线程编程基础

2024-07-12 05:41| 来源: 网络整理| 查看: 265

引言

Linux 是多任务操作系统,可以同时运行多个进程,来完成多项工作。

进程就是处于活动状态的程序,占用一定的内存空间。进程可以把自己复制一份,从而创造出一个新的进程。新的进程称为 子进程,原来的进程称为 父进程

进程可以复制自己。这意味着启动一个程序,可能会产生多个进程。这样的程序能同时进行多项工作。多进程编程就是要设计一个这样的程序。

进程的状态

进程从创建到运行结束,经历的全部过程,称为进程的生命周期。在生命周期的不同阶段,进程会呈现不同的状态。下表列出了进程可能出现的所有状态。

状态 含义 创建状态 : 正在创建 就绪 :刚刚创建好,还没运行过 内核状态 :运行中 用户状态 :暂停中 睡眠 :运行中的进程因为某些需求得不到满足而进入等待状态 唤醒 :睡眠中的进程,正在被唤醒 被抢占 :运行期间,CPU 被另一个进程抢占 僵死状态 :进程已经结束,但内存空间等占用的资源还未释放,被称为僵尸进程

进程的管理

每个进程都有一个唯一的编号,记为 PID (process id)。PID 应该用 pid_t 类型的变量来保存,pid_t 类型其实是 unsigned int 的别名。

下面两个函数一个返回当前进程的 PID,一个返回父进程的 PID

#include pid_t getpid(void); pid_t getppid(void);

在 Linux 系统中,除了 init 进程,其他进程都有一个父进程。对于在终端启动程序,它的父进程就是 Shell。下面程序在运行时输出自己的 PID 和父进程的 PID

#include #include int main() { pid_t pid; pid_t ppid; pid = getpid(); ppid = getppid(); printf("pid: %d\n", pid); printf("ppid: %d\n", ppid); return 0; } fork() 复制进程

fork() 函数以父进程为蓝本,产生一个子进程。

#include pid_t fork(void);

对于 fork() 函数的返回值,如果创建失败,将得到 -1;如果创建成功,在父进程中将得到子进程的 PID,在子进程中将得到 0

如果在 fork() 函数之后用一个 if 语句对 fork() 函数的返回值进行判断,子进程和父进程将进入不同的分支。

下面程序中的 if 语句让父进程输出 parent hello!,而子进程输出 child hello!

#include #include int main() { pid_t pid; pid = fork(); if (pid == -1) { perror("fork error"); return -1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3