【吴从周课程】多进程

进程:
处于运行状态中的程序称之为进程,进程是并发程序设计中的重要概念。

进程的三种基本状态:
1)运行态
进程占用CPU资源正在运行
2)等待态
此时不占用CPU资源,等待分配资源将其唤醒。
3)就绪态
具备执行条件,等待分配时间片

fork()函数:

  1. fork的作用
    我们知道,代码最终生成一个可执行文件,这个文件实际上就是一个机器可以识别的01序列,当文件被执行时便成为了一个进程。
    我们可以在代码中使用fork()函数来让代码生成的进程再生成一个子进程,生成子进程的即为父进程,fork函数在父进程中的返回值为子进程的进程编号,在子进程中的返回值为0。
  2. 为什么叫fork?
    可以这么理解:fork这个单词的中文含义有餐叉(n.),分叉(v.)的意思,使用fork函数来生成一个子进程,进程树中便多了一个分叉。

孤儿进程:
如果父进程先结束,则子进程成为孤儿进程,并被1号进程收养(即1进程成为父进程)

父子进程的共享部分与私有部分:
我们知道,当使用fork()函数创建一个子进程时,父子进程共用源代码,那么各自分支内的代码是各自所私有的,其余部分为共用代码。

例:
#include <bits/stdc++.h>
using namespace std;
int main()
{
  cout<<"A";
  if(fork()==0)
  {
  cout<<"child";
  }
  else
  {
  cout<<"parent";
  exit(0);
  }
  cout<<"B";
  return 0;
}

例程中if语句内的为子进程私有的,子进程执行,父进程不执行, else语句内的为父进程私有的,父进程执行,子进程不执行。

查看进程:
ps
ps -ef
UID 启动进程的操作系统用户
PID 进程编号
PPID 进程的父进程的编号
C CPU使用的资源百分比
STIME 进程启动时间
TTY 进程所属的终端
TIME 使用掉的CPU时间
CMD 执行的是什么指令

注意:
1.进程的编号是系统动态分配的,相同的程序在不同的时间执行,进程的编号是不同的。
2.同一时间,进程编号唯一,不会重复。

发布了61 篇原创文章 · 获赞 1 · 访问量 1373

猜你喜欢

转载自blog.csdn.net/qq_42622433/article/details/104109215