1.进程的概念

进程是一个动态的实体,是程序的一次执行过程。进程是操作系统资源分配的基本单位。

Linux下可通过ps或pstree查看当前系统中的进程。

查询正在运行的程序 ps -eo pid,command,cmd

PID:每个进程都有唯一的PID代表自己的身份。

COMMAND:进程的简称。

CMD:进程所对应的程序以及运行过程中所带的参数。

init是系统创建的第一个进程,该进程一直存在,直至关机。

函数声明—————- 函数

pid_t getpid(id)—–获得进程ID

pid_t getppid(id) —获得进程父进程的ID

pid_t getuid(id) —–获得进程的实际用户ID

pid_t geteuid(id)—-获得进程的有效用户ID

pid_t getgid(id)——获得进程的实际组ID

pid_t getegid(id)—–获得进程的有效组ID

实际用户ID:表示运行该进程的用户。

有效用户ID:表示以什么用户身份来运行进程。

实际组ID:它是实际用户所属的组的组ID。

有效组ID:有效组ID是有效用户所属的组的组ID。

Linux进程状态

1.运行状态:进程正在运行或在运行队列中等待运行。

2.可中断等待状态:进程正在等待某个事件完成。等待过程可被信号或定时器唤醒。

3.不可中断状态:等待某个事件完成,必须等待知道等待的时间发生。

4.僵死状态:进程已终止,但进程描述符还存在,知道父进程调用wati()函数后释放。

5.停止状态:进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信号后停止运行或该进程正在被跟踪(调试程序时)。

fork()函数:用于创建一个新进程。

拥有2个返回值。1.父进程调用fork函数后的返回值,返回值是刚刚创建的子进程ID。2.子进程的返回值,返回值为0。

example1.c(fork的使用)

#include

#include

#include

#include

int main(void)

{

pid_t pid;

printf("Process Creation Study\n");

pid = fork();

switch(pid)

{

case 0:

printf("Child process is running , CurPid is %d , Parent is %d\n",pid , getpid());

break;

case -1:

perror("Process Creation failed\n");

break;

default:

printf("Parent Process is running , ChildPid is %d , ParentPid is %d\n",pid,getpid());

break;

}

exit(0);

}

fork之后是父进程先执行还是子进程先执行,这取决于内核所使用的调度算法。

example2.c

#include

#include

#include

#include

int main(void)

{

pid_t pid;

printf(" Hello YinXin \n ");

//printf(" Hello YinXin ");

pid = fork();

printf("Hey\n");

}

有\n的结果

没\n的结果

原因:这和printf的缓冲机制有关。linux系统下printf中的内容会存放到stdout缓冲队列中。只有 \n才会刷新stdout,原先缓冲队列的内容清空,立马打印到屏幕上。

在使用fork是 缓冲队列的内容也会被复制过去,所以printf了2次。

孤儿进程

example3.c

#include

#include

#include

#include

//孤儿进程

int main(void)

{

pid_t pid;

pid = fork();

switch(pid)

{

case 0:

while(1)

{

printf("A background process , PID:%d\n, ParentID: %d\n",getpid(),getppid());

sleep(3);

}

case -1:

perror("Process creation failed\n");

exit(-1);

default:

printf("I am parent process ,my pid is %d\n",getpid());

exit(0);

}

return 0;

}

调用fork()函数后,父进程先执行,父进程PID 19315.子进程PID 19316.父进程执行完毕后,子进程就成了孤儿进程,有进程init进程收养。孤儿进程一直执行,,

fork和vfork的区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 2. fork ()父子进程的执行次序不确定 vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行。 3. vfork ()保证子进程先运行,在它调用exec 或exit 之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

linux编程进程,Linux编程—进程相关推荐

  1. Linux下C语言编程-进程的创建

    Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...

  2. 【Linux系统编程】Linux进程管理

    00. 目录 文章目录 00. 目录 01. 概述 02. 进程相关概念 03. 进程的状态 04. 进程调度 05. 程序调度函数 06. 附录 01. 概述 在Linux的内核的五大组成模块中,进 ...

  3. 【Linux系统编程】特殊进程之守护进程

    00. 目录 文章目录 00. 目录 01. 守护进程概述 02. 守护进程查看方法 03. 编写守护进程的步骤 04. 守护进程代码 05. 附录 01. 守护进程概述 守护进程(Daemon Pr ...

  4. 【Linux系统编程】特殊进程之孤儿进程

    00. 目录 文章目录 00. 目录 01. 孤儿进程概述 02. 孤儿进程代码 03. 附录 01. 孤儿进程概述 父进程运行结束,但子进程还在运行的子进程就称为孤儿进程(Orphan Proces ...

  5. 【Linux系统编程】特殊进程之僵尸进程

    00. 目录 文章目录 00. 目录 01. 僵尸进程概述 02. 僵尸进程案例 03. 避免僵尸进程 04. 附录 01. 僵尸进程概述 进程已运行结束,但进程的占用的资源未被回收,这样的进程称为僵 ...

  6. 【Linux系统编程】进程概述和进程号

    00. 目录 文章目录 00. 目录 01. 进程概述 02. 进程状态 03. 进程控制块 04. 进程号 05. 进程号相关函数 06. 案例实战 07. 附录 01. 进程概述 我们平时写的 C ...

  7. Linux系统编程(三)进程间的通信

    Linux系统编程(三)进程间的通信 一.为什么需要进程之间的通信(IPC)? 二.管道 1.概念 2.特质 3.原理 4.局限性 5.代码 2.读入数据 三.共享存储映射 注意事项 父子进程通信 一 ...

  8. Linux系统编程(二)孤儿进程和僵尸进程

    Linux系统编程(二) 一.exec函数族 1.exec函数 二.孤儿进程和僵尸进程 三.wait和waitpid 1.wait函数 2.waitpid函数 一.exec函数族 exec函数使用时, ...

  9. linux+守护进程+php,【转载】Linux 守护进程的编程方法

    [转载]Linux 守护进程的编程方法 原文见: http://www.linuxdevelop.org/tingxx/show.php?table=c&id=3 Linux 守护进程的编程方 ...

  10. Linux守护进程的编程实现

    Linux 守护进程的编程方法 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数s ...

最新文章

  1. Jupyter-ROS(机器人操作系统)
  2. 初探可编程网关 Pipy
  3. 关于亿级账户数据迁移,你应该试试这种方法...
  4. system v和posix的共享内存对比 共享内存位置
  5. 智能家居迈向体验型市场,Aqara如何做到先行一步?
  6. php编写猜拳游戏,Python中猜拳游戏与猜筛子游戏的实现方法
  7. android编程多组件布局,Android把多个控件定义成一个整体的布局类使用
  8. PUSHA/POPA
  9. win10 mbr下装linux,(MBR模式)Win10下安装Ubuntu18.04双系统
  10. js中如何把字符串转化为对象、数组示例代码
  11. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
  12. ntpdate 时间同步
  13. 百度站长俱乐部SEO提问收集-7
  14. adadelta算法_(学习率自适应的梯度下降算法)ADADELTA: AN ADAPTIVE LEARNING RATE METHOD(2012)...
  15. 阿里云 centos7.2 安装openstack报错
  16. ramda 函数 String
  17. 【数学模拟卷总结】2022李林四套卷数学二第一套
  18. 即时通讯(IM)开源项目OpenIM本周版本发布-v1.0.6
  19. C++笔记(《C++新经典》)
  20. Acrel-3000电能管理系统保证企业生产人员的生命安全,提高生产人员的工作效率

热门文章

  1. [ubuntu 16.04]如何在新建的Anaconda环境中打开jupyter notebook
  2. Linux修改终端提示符
  3. Python函数的静态变量
  4. DB2数据库对现有表格字段修改
  5. Java:cmd命令行中 错误: 找不到或无法加载主类(从原理出发讲解!)
  6. sqlserver 获取所有表的字段类型等信息
  7. 279. Perfect Squares
  8. 虚拟机安装Ubuntu无法通过Xshell登录
  9. kubenetes 1.4 安装后8080端口无法访问
  10. leetcode 786 第K个最小的素数分数