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;
}

运行结果如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值