Linux 第十一章

这篇具有很好参考价值的文章主要介绍了Linux 第十一章。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

进程

​编辑

进程怎么管理

task_struct 核心字段都有哪些

进程(任务)对应的标识符:

如何去查看一个进程的pid?

进程创建

linux中创建进程的方式

1.命令行中直接启动进程(手动启动)

2.通过代码来进程创建

在操作系统加载到内存时,其他进程并不是在操作系统这块内存上加载的。

父进程是什么

bash:命令行解释器

如何获取父进程的ID?

查看进程的第二种方式

工作目录


进程

引入:在内存上的程序就是进程,操作系统内可能会同时存在多个进程,操作系统就要管理所有的进程

Linux 第十一章,linux,linux,运维,服务器

进程怎么管理

类似创建结构体,将各个进程的属性放在对应的结构体中,连接所有的结构体,这样操作系统可以很好的管理

进程pcb:进程控制块

就是一个结构体,结构体里放着进程的各种属性(id、代码地址和数据地址、状态、优先级、链接字段等)

对进程的管理,被建模为对进程控制块链表的管理

总结:

什么是进程?

进程=可执行程序+内核数据结构(pcb、….)

内核数据结构:方便os对进程进行管理

task_struct 核心字段都有哪些

Linux中,进程pcb具体是struct task_struct,Linux中采用双链表的形式链接的pcb

进程(任务)对应的标识符:

pid(每一个正在运行的进程都有一个唯一的标识符)

如何去查看一个进程的pid?

1)通过ps(Linux中的"ps"指令用于查看系统中正在运行的进程信息)

//ps ajx是一种用于显示Linux系统进程信息的命令
[BCH@hcss-ecs-6176 9_23]$ ps ajx | head -1 && ps ajx | grep mycode//&& 可以同时执行两个命令
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
2932 28593 28593  1485 pts/0    28593 S+    1000   0:00 ./mycode
3906 28927 28926  2057 pts/2    28926 R+    1000   0:00 grep --color=auto mycode//因为我们使用了grep这个指令,所以查询mycode进程时,也查询到grep的进程

2)通过系统调用的方法去查看pid

谁调用getpid()这个函数,就获取这个进程的pid,需要头文件#include<sys/types.h> #include<unistd.h>

code.c文件
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
        int i=0;
        while(i<100)
        {
                pid_t id=getpid();
                printf("我是一个进程...,我的pid%d\n",id);
                sleep(1);
                i++;
        }
        return 0;
}

[BCH@hcss-ecs-6176 9_23]$ make 
make: “mycode”是最新的。
[BCH@hcss-ecs-6176 9_23]$ ./mycode
我是一个进程...,我的pid12163//这个进程的pid就是12163
我是一个进程...,我的pid12163
我是一个进程...,我的pid12163
我是一个进程...,我的pid12163

我们可以用进程pid对进程进行控制

例如 kill -9 进程id//这样就可以杀死改id的进程

进程ppid:父进程id

命令行中父进程到底是谁呢?

命令行解释器bash

进程创建

linux中创建进程的方式

1.命令行中直接启动进程(手动启动)

    1)在输入指令的时候,回车这样进程就启动了

    2)在windows中双击图标的时候,进程就启动了

2.通过代码来进程创建

fork等函数,启动进程的时候,操作系统会创建对应的pcb,本质就是创建进程,一般是通过父进程创建的(父子关系)!

在操作系统加载到内存时,其他进程并不是在操作系统这块内存上加载的。

当操作系统启动后,它会为每个正在运行的进程分配独立的内存空间。操作系统会为每个进程创建一个称为进程控制块(Process Control Block,PCB)的数据结构来管理进程的状态和资源信息。

每个进程的 PCB 包含了进程的代码、数据和堆栈等信息,这些内容被加载到各自的内存空间中。操作系统负责调度不同进程之间的切换,并确保每个进程在其分配的内存空间中运行,从而实现进程间的隔离和保护。

因此,当操作系统加载到内存时,它会为其他进程分配独立的内存空间,并在这些内存空间中加载并运行各个进程的代码和数据。每个进程的内存空间都是相互独立的,彼此之间不会互相干扰。这种隔离和保护机制有助于确保操作系统和各个进程的稳定性和安全性。

父进程是什么

父进程是指在创建一个新进程时生成该新进程的现有进程。

bash:命令行解释器

我们命令行启动的进程,都是bash的子进程

如何获取父进程的ID?

通过getppid函数

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
        int i=0;
        while(i<100)
        {
                printf("I am a process: myid: %d,parent id: %d\n",getpid(),getppid());//获取父子进程
                sleep(1);
                i++;
        }
        return 0;
}

[BCH@hcss-ecs-6176 9_23]$ make
gcc -o mycode code.c
[BCH@hcss-ecs-6176 9_23]$ ./mycode//加载进程
I am a process: myid: 29912,parent id: 20426//子进程的pid是29912,父进程的pid20426
I am a process: myid: 29912,parent id: 20426
I am a process: myid: 29912,parent id: 20426

task_struct:其中肯定包含pid、ppid

查看进程的第二种方式

除了使用ps命令查看进程,Proc动态目录结构,存放所有存在的进程,目录的名称就是以这个id命名的

该目录下的文件:其中就包含了该进程的所有属性

[BCH@hcss-ecs-6176 9_23]$ ls /proc/25204 -l
总用量 0
dr-xr-xr-x 2 BCH BCH 0 9月  25 10:24 attr
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 autogroup
-r-------- 1 BCH BCH 0 9月  25 10:24 auxv
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 cgroup
--w------- 1 BCH BCH 0 9月  25 10:24 clear_refs
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 cmdline
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 comm
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 coredump_filter
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 cpuset
lrwxrwxrwx 1 BCH BCH 0 9月  25 10:24 cwd -> /home/BCH/9_23//当前目录
-r-------- 1 BCH BCH 0 9月  25 10:16 environ
lrwxrwxrwx 1 BCH BCH 0 9月  25 10:16 exe -> /usr/bin/bash//一个进程,能够找到自己的可执行程序
dr-x------ 2 BCH BCH 0 9月  25 10:16 fd
dr-x------ 2 BCH BCH 0 9月  25 10:24 fdinfo
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 gid_map
-r-------- 1 BCH BCH 0 9月  25 10:24 io
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 limits
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 loginuid
dr-x------ 2 BCH BCH 0 9月  25 10:24 map_files
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 maps
-rw------- 1 BCH BCH 0 9月  25 10:24 mem
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 mountinfo
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 mounts
-r-------- 1 BCH BCH 0 9月  25 10:24 mountstats
dr-xr-xr-x 5 BCH BCH 0 9月  25 10:24 net
dr-x--x--x 2 BCH BCH 0 9月  25 10:24 ns
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 numa_maps
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 oom_adj
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 oom_score
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 oom_score_adj
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 pagemap
-r-------- 1 BCH BCH 0 9月  25 10:24 patch_state
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 personality
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 projid_map
lrwxrwxrwx 1 BCH BCH 0 9月  25 10:24 root -> /
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 sched
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 schedstat
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 sessionid
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 setgroups
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 smaps
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 stack
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 stat
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 statm
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 status
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 syscall
dr-xr-xr-x 3 BCH BCH 0 9月  25 10:24 task
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 timers
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 uid_map
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 wchan

我们一般查看进程,还是优先使用ps命令

工作目录

工作目录是指当前用户所处的目录,也称为当前工作目录或当前目录。当你在终端中打开一个新的命令行窗口或者执行一个命令时,你所处的目录就是工作目录。

你可以使用 pwd 命令(print working directory)来查看当前工作目录的绝对路径。你也可以使用 cd 命令(change directory)来切换工作目录到其他目录。

例如,如果你的当前工作目录是 /home/user,那么在终端中执行 
pwd 命令会显示 /home/user,执行 cd Documents 命令会将工作目录
切换到 /home/user/Documents。

工作目录在 Linux 中非常重要,因为许多命令和操作都是基于当前工作目录进行的。

总结:

1)一个进程,能够找到自己的可执行程序

2)每一个进程,都有自己的工作目录

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 文章来源地址https://www.toymoban.com/news/detail-860775.html

到了这里,关于Linux 第十一章的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(66)
  • Linux高性能服务器编程 学习笔记 第一章 TCP/IP协议族

    现在Internet使用的主流协议族是TCP/IP协议族,它是一个分层、多协议的通信体系。 TCP/IP协议族包含众多协议,我们只详细讨论IP协议和TCP协议,因为它们对编写网络应用程序有最直接的影响。如果想系统学习网络协议,RFC(Request For Comments,评论请求)是首选资料。 TCP/IP协议

    2024年02月09日
    浏览(61)
  • 基于linux下的高并发服务器开发(第一章)- Makefile(2)1.11

    ◼ 命令在执行之前,需要先检查规则中的依赖是否存在      如果存在,执行命令      如果不存在,向下检查其它的规则,检查有没有一个规则是用来生成这个依赖的,如  果找到了,则执行该规则中的命令。 ◼ 检测更新,在执行规则中的命令时,会比较目标和依赖文

    2024年02月16日
    浏览(55)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(85)
  • 基于linux下的高并发服务器开发(第一章)- 模拟实现 ls-l 命令

     这一小节会用到上面两张图的红色框里面的变量 任务: 模拟实现 ls -l 指令 -rw-rw-r-- 1 nowcoder nowcoder 12 12月  3 15:48 a.txt    

    2024年02月16日
    浏览(47)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(64)
  • 基于linux下的高并发服务器开发(第一章)- 解决动态库加载失败的问题1.8

    1、获取当前动态库所在路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nowcoder/Linux/lesson06/library/lib  ldd main ./main (1)先进入到~目录下  (2)在此目录下输入ll命令,打印内容如下,我们可以看到有一个.bashrc  (3)配置.bashrc文件,命令vim .bashrc  (4)shift+g,跳到最后一行,按住i键

    2024年02月16日
    浏览(44)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(92)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(74)
  • 一百五十一、Kettle——Linux上安装的kettle8.2开启carte服务以及配置子服务器

    kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后,准备在Linux上启动kettle的carte服务 kettle的Linux运行的carte服务文件是carte.sh 文件路径是/opt/install/data-integration/pwd 1、修改主节点配置文件 [root@hurys22 pwd]# vi  carte-config-master-8080.xml  注意:修改8

    2024年02月13日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包