c/c++基础之-----进程

进程基础(一)

进程指正在运行的程序,如下图示,是资源分配的最小单位,可以通过“ps ”或“top”等命令查看正在运行的进程,线程是系统的最小调度单位,一个进程可以拥有多个线程,同一进程里的线程可以共享此进程的同一资源。

每个进程都有一个唯一的标识符,即进程 ID,简称 pid 。进程间的通信的几种方法?

  1. 管道通信:有名管道,无名管道。

  1. 信号通信:信号的发送,信号的接收,信号的处理。

  1. IPC通信:共享内存,消息队列,信号灯。

  1. Socket通信。

进程的三中基本状态以及转换:

进程创建

所有的进程都是由其他进程创建(除了 pid 为 0 号的 idle 进程),pid 号为1 的init 进程是系统启动后运行的第一个进程,是所有进程的父进程,init 进程会初始化一部分系统服务,创建其他进程。

创建新进程的那个进程称为父进程,新进程称为子进程,父进程和子进程拥有相同的代码段数据段,有各自独立的地址空间。采用写时拷贝技术,即创建的新进程不会立即把父进程的资源空间复制过来,只有在修改时才会复制资源,另外父进程挂起的信号和文件锁不会被子进程继承。

子进程结束后,它的父进程要回收它的资源,否则就会成为僵尸进程 。

如果父进程先结束,子进程会被 init 进程收养,称为孤儿进程。

创建进程常用的函数定义如下:

头文件

#include <sys/types.h> #include <unistd.h>

函数

pid_t getpid(void);

返回值

PID 号

功能

获取此进程 PID

头文件

#include <sys/types.h> #include <unistd.h>

函数

pid_t getppid(void);

返回值

PID 号

功能

获取父进程 PID

头文件

#include <unistd.h>

函数

pid_t fork(void);

返回值

调用成功父进程返回子进程号,子进程返回 0,失败返回-1。

功能

系统调用,创建一个进程

// 在父进程中创建子进程
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();
if (pid < 0)
{
printf("fork is error \n");
return -1;
}
//父进程
if (pid > 0)
{
printf("This is parent,parent pid is %d\n", getpid());
}
//子进程
if (pid == 0)
{
printf("This is child,child pid is %d,parent pid is %d\n", getpid(), getppid());
}
return 0;
}

运行结果如下:

猜你喜欢

转载自blog.csdn.net/qq_43805944/article/details/129690940