LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge

LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/getppid、ps、kill)

1、进程的概念

编译好的二进制文件叫程序

进行是运行起来的程序

站在程序员的角度:运行一系列指令的过程

站在操作系统角度:分配系统资源的基本单位

区别:

程序占用磁盘,不占用系统资源

进程占用系统资源

一个程序对应多个进程,可以同时运行多个,一个进程对应一个程序

程序没有生命周期,进程有生命周期

2、进程的过程

3、进程的状态

4、MMU的作用

1、虚拟内存和物理内存的映射

2、修改内存访问级别

3、用户空间映射到物理内在是独立的

5、进程控制块PCB

[email protected]:~# grep -rn "struct task_struct {" /usr/ 查找进程控制块代码

/usr/share/systemtap/tapset/linux/signal.stp:837:// struct task_struct {

/usr/share/systemtap/tapset/linux/signal.stp:876:// struct task_struct {

/usr/src/linux-headers-4.4.0-148/include/linux/sched.h:1391:struct task_struct {

/usr/src/linux-headers-4.4.0-31/include/linux/sched.h:1380:struct task_struct {

/usr/src/linux-headers-4.4.0-93/include/linux/sched.h:1380:struct task_struct {

[email protected]:/usr/src/linux-headers-4.4.0-31/include/linux# pwd

/usr/src/linux-headers-4.4.0-31/include/linux

[email protected]:/usr/src/linux-headers-4.4.0-31/include/linux# ls sched.h

sched.h

6、环境变量

查看所有环境变量

[email protected]:/usr/src/linux-headers-4.4.0-31/include/linux# env

查看某个环境变量

[email protected]:~# echo $PATH

/usr/java/jdk1.8.0_181/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

PATH可执行文件搜索路径

SHELL当前使用的shell,通常是/bin/bash

TERM当前终端类型,图形界面终端下的值通常是xterm

LANG语言与locale,决定了字符编码以及时间,货币等信息的显示式

HOME当前用户主目标录的路径

7、getenv获取环境变量

char *getenv(const char *name);

[[email protected]_0_5_centos test3]# more getenv.c

#include

#include

int main()

{

printf("homepath is [%s]\n",getenv("HOME"));

return 0;

}

[[email protected]_0_5_centos test3]# gcc  getenv.c

[[email protected]_0_5_centos test3]# ./a.out

homepath is [/root]

8、fork创建一个新的进程

pid_t fork(void);

返回值:

失败:-1

成功,两次返回

父进程返回子进程的id

子进程返回0

9、getpid和getppid

获得pid,进程id,获得当前进程的

pid_t getpid(void);

获得当前进程的父进程的id

pid_t getppid(void);

代码示例

[[email protected]_0_5_centos test3]# more fork.c

#include

#include

#include

int main(){

printf("begin...\n");

pid_t pid =fork();

if(pid<0){

perror("fork err");

exit(1);

}

if(pid==0){

//子进程

printf("I am child,pid=%d,ppid=%d\n",getpid(),getppid());

}

else if(pid>0){

//父进程

printf("childpid=%d,self=%d,ppid=%d\n",pid,getpid(),getppid());

sleep(1);

}

printf("end...\n");

return 0;

}

[[email protected]_0_5_centos test3]# gcc fork.c

[[email protected]_0_5_centos test3]# ./a.out

begin...

childpid=19741,self=19740,ppid=18132

I am child,pid=19741,ppid=19740

end...

end...

10、ps  aux查看进程 ps  ajx还能查到父进程

[[email protected]_0_5_centos test3]# ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0  41096  3412 ?        Ss    2019  32:06 /usr/lib/system

root         2  0.0  0.0      0     0 ?        S     2019   0:01 [kthreadd]

root         3  0.0  0.0      0     0 ?        S     2019   0:26 [ksoftirqd/0]

root         5  0.0  0.0      0     0 ?        S<    2019   0:00 [kworker/0:0H]

root         7  0.0  0.0      0     0 ?        S     2019   1:57 [migration/0]

[[email protected]_0_5_centos test3]# ps ajx   ---可以追述进程之间的血缘关系

PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND

0     1     1     1 ?           -1 Ss       0  32:06 /usr/lib/systemd/system

0     2     0     0 ?           -1 S        0   0:01 [kthreadd]

2     3     0     0 ?           -1 S        0   0:26 [ksoftirqd/0]

2     5     0     0 ?           -1 S<       0   0:00 [kworker/0:0H]

2     7     0     0 ?           -1 S        0   1:57 [migration/0]

11、kill 进程ID 杀进程

[[email protected]_0_5_centos test3]#kill  2898

12、创建n个子进程

父进程创建5个子进程示例

[[email protected]_0_5_centos test3]# more fork_five.c

#include

#include

#include

int main(){

int i=0;

pid_t pid=0;

for(i=0;i<5;i++){ //父进程结束循环

pid=fork();

if(pid==0){ //子进程

printf("I am child,pid=%d,ppid=%d\n",getpid(),getppid());

break;//子进程退出循环

}

else if(pid>0){//父进程

printf("I am fatcher,pid=%d,ppid=%d\n",getpid(),getppid(

));

sleep(1);

}

}

sleep(i);

//If(i<5){

//printf("I am child,pid=%d,ppid=%d\n",getpid(),getppid());

//}else{

// printf("I am fatcher,pid=%d,ppid=%d\n",getpid(),getppid());

//}

while(1){

sleep(1);

}

return 0;

}

[[email protected]_0_5_centos test3]# gcc fork_five.c

[[email protected]_0_5_centos test3]# ./a.out

I am fatcher,pid=23907,ppid=18132

I am child,pid=23908,ppid=23907

I am fatcher,pid=23907,ppid=18132

I am child,pid=23917,ppid=23907

I am fatcher,pid=23907,ppid=18132

I am child,pid=23923,ppid=23907

I am fatcher,pid=23907,ppid=18132

I am child,pid=23924,ppid=23907

I am fatcher,pid=23907,ppid=18132

I am child,pid=23926,ppid=23907

[[email protected]_0_5_centos ~]# ps ajx|grep a.out

18132 23907 23907 18132 pts/2    23907 S+       0   0:00 ./a.out

23907 23908 23907 18132 pts/2    23907 S+       0   0:00 ./a.out

23907 23917 23907 18132 pts/2    23907 S+       0   0:00 ./a.out

23907 23923 23907 18132 pts/2    23907 S+       0   0:00 ./a.out

23907 23924 23907 18132 pts/2    23907 S+       0   0:00 ./a.out

23907 23926 23907 18132 pts/2    23907 S+       0   0:00 ./a.out

23943 24045 24044 23943 pts/0    24044 R+       0   0:00 grep --color=auto a.out

LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge相关教程

linux进程的环境变量,LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge...相关推荐

  1. Linux系统学习: 进程、重定向和管道指令:xargs 指令的作用是

    进程 为了弄清楚这节课程的内容,也就是管道,我们先来讨论一下进程. 我们知道,应用的可执行文件是放在文件系统里,把可执行文件启动,就会在操作系统里(具体来说是内存中)形成一个应用的副本,这个副本就是进 ...

  2. linux中daemonize用法,daemonize Unix系统后台守护进程管理软件

    在我们的工作中,很多时候都需要在linux中后台运行程序, 方法1: nohup & 方法2: daemonize Unix系统后台守护进程管理软件 优点:更加正规 后台运⾏更稳定 git c ...

  3. 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置

    相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...

  4. java 环境变量 win8_Win8系统下如何设置java环境变量

    Java是一种应用于分布式网络环境的程序设计语言,我们在学习java的时候,必须先来配置一下java的环境变量,那么在win8系统中怎么设置java环境变量呢?接下来给大家介绍一下具体的方法设置方法吧 ...

  5. macbook配置java环境变量_Mac系统中如何配置JDK环境变量?Mac中JDK环境变量配置教程...

    Mac系统中如何配置JDK环境变量?在使用mac系统的电脑时,如何进行设置JDK环境变量呢?接下来的文章中小编将会带来详细的介绍,希望对您有所帮助. Mac中JDK环境变量配置教程 1.访问Oracl ...

  6. win10taskkill强行结束进程_技术员细说win10系统强制结束进程命令的教程

    win10系统是很多电脑用户首选的装机系统,然而有不少用户在使用过程中可能会碰到win10系统强制结束进程命令的情况.大部分用户电脑技术都是菜鸟水平,面对win10系统强制结束进程命令的问题,无法自行 ...

  7. linux deepin 进入桌面,让deepin系统用上gnome桌面环境,附成功的经验分享

    在deepin系统上用的是dde,但你可以安装gnome并配置成可用性非常强的gnome桌面环境,打造成为一款特色的deepin+gnome风格系统,以下是一些成功的经验分享. 具体操作 安装gnom ...

  8. 系统学习 TypeScript(四)——变量声明的初步学习

    前言 认识了 TypeScript 中的基础类型,接下来当然是变量声明的相关学习了. 声明多维数组 假如有这么一个声明: let arr3: number[][][]; 想要知道 arr3 的具体类型 ...

  9. 指针系统学习5-对使用字符指针变量和字符数组的讨论

    虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈-- 主要概括起来有以下几点: 1. 字符数组由若干个元素组成,每个元素中  放一个字符,而字符指针变量中 ...

  10. python保存数据型变量_Python基础学习笔记(一)变量与数据类型

    https://m.toutiao.com/is/J3fN6eK/ Python是一门易学的面向对象的程序设计语言,可以轻易地完成界面.文件.封装等高阶需求,可移植性好,有非常多功能强大的库与包,如N ...

最新文章

  1. python字典遍历的几种方法(for in 用法)
  2. HDU 4135 Co-prime
  3. .net core实现跨域
  4. 获取IE (控件)的所有链接(包括Frameset, iframe)zz
  5. Linux查找树莓派ip地址,让树莓派“说”出自己的IP地址
  6. easyui关于validatebox实现多重规则验证的实践
  7. 利用Rsyslog向ElasticSearch推送nginx access日志
  8. 一键搞定JavaEE应用,JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0.9版
  9. mysql 更新sql 语句怎么写_sql更新语句怎么写
  10. 【Unity3D插件】Dialogue System for Unity插件分享《对话系统插件》
  11. 建立TCP连接的时候,syn包什么情况下会被对端rst?
  12. 新闻资讯页面html,html页模板
  13. servlet:共享资源造成的线程冲突
  14. 如何将两张图片上下合成一张?
  15. 【模拟经营】《模拟城市4豪华版》免安装中文版
  16. java 佛祖保佑_佛祖保佑,永无bug
  17. html和requests得基本用法
  18. PCM与G711 转换
  19. 基于Markdown 搭建自己的博客,哪个工具好?
  20. 横河川仪压力变送器故障代码_压力变送器常见故障及解决办法

热门文章

  1. C++ 可以把变量当成函数用~~
  2. 用fgets替代gets
  3. 2020-11-25(多级页表的补充)
  4. MySQL用户授权(GRANT)
  5. 10、MySQL存储引擎有哪些?
  6. 编写一个c程序的头文件
  7. HTTPSession对象知识总结
  8. Linux上安装Nginx
  9. Spring Boot + EasyExcel 导入导出,好用到爆!
  10. 总结2020,起航2021,奔向腾讯,实现增长!