linux进程的环境变量,LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge...
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...相关推荐
- Linux系统学习: 进程、重定向和管道指令:xargs 指令的作用是
进程 为了弄清楚这节课程的内容,也就是管道,我们先来讨论一下进程. 我们知道,应用的可执行文件是放在文件系统里,把可执行文件启动,就会在操作系统里(具体来说是内存中)形成一个应用的副本,这个副本就是进 ...
- linux中daemonize用法,daemonize Unix系统后台守护进程管理软件
在我们的工作中,很多时候都需要在linux中后台运行程序, 方法1: nohup & 方法2: daemonize Unix系统后台守护进程管理软件 优点:更加正规 后台运⾏更稳定 git c ...
- 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置
相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...
- java 环境变量 win8_Win8系统下如何设置java环境变量
Java是一种应用于分布式网络环境的程序设计语言,我们在学习java的时候,必须先来配置一下java的环境变量,那么在win8系统中怎么设置java环境变量呢?接下来给大家介绍一下具体的方法设置方法吧 ...
- macbook配置java环境变量_Mac系统中如何配置JDK环境变量?Mac中JDK环境变量配置教程...
Mac系统中如何配置JDK环境变量?在使用mac系统的电脑时,如何进行设置JDK环境变量呢?接下来的文章中小编将会带来详细的介绍,希望对您有所帮助. Mac中JDK环境变量配置教程 1.访问Oracl ...
- win10taskkill强行结束进程_技术员细说win10系统强制结束进程命令的教程
win10系统是很多电脑用户首选的装机系统,然而有不少用户在使用过程中可能会碰到win10系统强制结束进程命令的情况.大部分用户电脑技术都是菜鸟水平,面对win10系统强制结束进程命令的问题,无法自行 ...
- linux deepin 进入桌面,让deepin系统用上gnome桌面环境,附成功的经验分享
在deepin系统上用的是dde,但你可以安装gnome并配置成可用性非常强的gnome桌面环境,打造成为一款特色的deepin+gnome风格系统,以下是一些成功的经验分享. 具体操作 安装gnom ...
- 系统学习 TypeScript(四)——变量声明的初步学习
前言 认识了 TypeScript 中的基础类型,接下来当然是变量声明的相关学习了. 声明多维数组 假如有这么一个声明: let arr3: number[][][]; 想要知道 arr3 的具体类型 ...
- 指针系统学习5-对使用字符指针变量和字符数组的讨论
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈-- 主要概括起来有以下几点: 1. 字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中 ...
- python保存数据型变量_Python基础学习笔记(一)变量与数据类型
https://m.toutiao.com/is/J3fN6eK/ Python是一门易学的面向对象的程序设计语言,可以轻易地完成界面.文件.封装等高阶需求,可移植性好,有非常多功能强大的库与包,如N ...
最新文章
- python字典遍历的几种方法(for in 用法)
- HDU 4135 Co-prime
- .net core实现跨域
- 获取IE (控件)的所有链接(包括Frameset, iframe)zz
- Linux查找树莓派ip地址,让树莓派“说”出自己的IP地址
- easyui关于validatebox实现多重规则验证的实践
- 利用Rsyslog向ElasticSearch推送nginx access日志
- 一键搞定JavaEE应用,JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0.9版
- mysql 更新sql 语句怎么写_sql更新语句怎么写
- 【Unity3D插件】Dialogue System for Unity插件分享《对话系统插件》
- 建立TCP连接的时候,syn包什么情况下会被对端rst?
- 新闻资讯页面html,html页模板
- servlet:共享资源造成的线程冲突
- 如何将两张图片上下合成一张?
- 【模拟经营】《模拟城市4豪华版》免安装中文版
- java 佛祖保佑_佛祖保佑,永无bug
- html和requests得基本用法
- PCM与G711 转换
- 基于Markdown 搭建自己的博客,哪个工具好?
- 横河川仪压力变送器故障代码_压力变送器常见故障及解决办法