[oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

简介: [oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

 

查看进程

回忆上次内容

    • 上次先进程查询
      • ps -elf 查看所有进程信息
      • ps -lf 查看本终端相关进程信息
        • 杀死进程
          • kill -9 PID 给进程发送死亡信号
            • 运行多个 python3 show_time.py 的话
              • 各个进程独立
              • python3 show_time.py 大概 8+M
              • 各占内存
                • 这些进程之间是什么关系呢?🤔

                image.gif编辑

                具体查询

                  • zsh进程相关的 3 个进程
                    • zsh(当前的 shell 环境)
                      • zsh(shell本身)进程
                        • /usr/bin/python3 /home/shiyanlou/sleep.py
                          • 输出时间的python程序
                            • ps -lf
                              • 查询进程的ps进程

                                  image.gif编辑

                                    • 这进程之间有父子关系

                                    父子关系

                                      • pid 是指进程的 id
                                        • process id
                                          • ppid 是指 进程 id
                                            • parent process id
                                              • ppidpid 的爸爸

                                              image.gif编辑

                                                • pspython3 都是 zsh 的子进程
                                                • python3 这个进程占内存是 SZ
                                                  • 4860 个 Page
                                                  • 每个 page 大概 4K
                                                    • 总共 10+M

                                                        image.gif编辑

                                                          • python3 这个文件不是本身才 4.3M 么
                                                            • 都装进内存也就是 4.3M
                                                            • 都装进内存页没有 10+M 呀?

                                                              10+M 的原因

                                                                • 除了基础的部分(内建模块函数)之外
                                                                  • print()
                                                                  • ord()、chr()
                                                                  • int()、hex()、bin()
                                                                    • 还有新加载的部分
                                                                      • sleep.py
                                                                      • 还有 import 进来的 time 这个 module

                                                                        实际分配

                                                                        ps -o pid,ppid,sz,vsz,rss,cmd

                                                                          • SZ 是欲分配的内存用页(4K)来当单位
                                                                          • VSZ 是欲分配的内存用 K 来当单位

                                                                          image.gif编辑

                                                                            • RSS 非交换区的内存用 K 来当单位
                                                                            • 也就是说实际这个东西也就 8+M

                                                                            image.gif编辑

                                                                            后台多任务查询jobs

                                                                              • 还可以用jobs查看当前的任务

                                                                              image.gif编辑

                                                                                • jobs 可以看到后台的任务
                                                                                  • 我们可以切换任务到前台吗

                                                                                    将任务切换到前台

                                                                                    image.gif编辑

                                                                                      • fg 可以
                                                                                        • 将最后一个任务(3#job)
                                                                                        • 切换到前台
                                                                                          • 可以切2#job吗?

                                                                                          指定任务进行切换

                                                                                            • 我们可以用 fg 加参数的方式
                                                                                              • 把指定编号的进程恢复到前台
                                                                                              • 注意前面的 1193、1527、1542 分别是他们的 pid

                                                                                                image.gif编辑

                                                                                                  • 这就是前后台切换
                                                                                                    • 用 ctrl + z 把当前进程切换到后台
                                                                                                    • 用jobs查询当前shell的后台任务
                                                                                                    • 用ps可以查看进程
                                                                                                    • 用kill可以结束进程
                                                                                                    • 用 ctrl + c 结束当前前台的进程
                                                                                                      • jobs这个词怎么来的呢?

                                                                                                      jobs

                                                                                                        • 词源字典
                                                                                                          • 凯尔特语(gob)、(gop)
                                                                                                          • 原意就是口(the mouth)
                                                                                                          • 中古英语就变成(jobbe)
                                                                                                            • 一堆(lump)
                                                                                                            • 一口(mouthful)
                                                                                                              • 再演变而成一件工作

                                                                                                                image.gif编辑

                                                                                                                  • work
                                                                                                                    • 是长时期稳定的工作
                                                                                                                    • 全日制的工作
                                                                                                                      • jobs
                                                                                                                        • 是临时突发的工作
                                                                                                                        • 零工
                                                                                                                        • 偷窃也叫jobs
                                                                                                                          • 如果两个jobs的话
                                                                                                                            • 占用内存会变小吗?

                                                                                                                              两个进程

                                                                                                                                • 我们开两个 show_time.py
                                                                                                                                • PID 分别是 422、514

                                                                                                                                image.gif编辑

                                                                                                                                  • 然后观察到
                                                                                                                                    • 每个 python进程 实际分配差不多都是 9M(RSS)
                                                                                                                                    • 相互之间是独立的兄弟进程
                                                                                                                                    • 但是从逻辑上都属于zsh的子进程
                                                                                                                                      • 先运行的进程在非交换区的内存占用略高
                                                                                                                                          • 如果开多个xfce 进程情况又是如何呢?
                                                                                                                                          • 再打开几个xfce终端

                                                                                                                                          进程层次关系

                                                                                                                                            • ps -elf
                                                                                                                                              • 拉到最后
                                                                                                                                              • 找zsh和上级的xfce4

                                                                                                                                                image.gif编辑

                                                                                                                                                  • 祖父是xfce4-terminal
                                                                                                                                                    • 大伯是zsh(252)
                                                                                                                                                      • 家里三个兄弟
                                                                                                                                                        • 二伯是zsh(405)
                                                                                                                                                          • 家里也是三兄弟
                                                                                                                                                              • 就像一棵树
                                                                                                                                                                • 可以用树的形式观察吗?

                                                                                                                                                                  pstree

                                                                                                                                                                    • pstree -h 命令查看这棵树

                                                                                                                                                                    image.gif编辑

                                                                                                                                                                      • 可以看到清晰地父子兄弟关系

                                                                                                                                                                      总结

                                                                                                                                                                        • 进程前后台切换
                                                                                                                                                                          • ctrl + z 把当前进程切换到后台并暂停
                                                                                                                                                                          • jobs 查看所有作业
                                                                                                                                                                          • fg 可以把进程再切回前台
                                                                                                                                                                            • fg %1 可以把指定的进程切回前台
                                                                                                                                                                              • bg 可以让进程在后台运行
                                                                                                                                                                                • 进程查询
                                                                                                                                                                                  • ps -elf 查看所有进程信息
                                                                                                                                                                                  • ps -lf 查看本终端相关进程信息
                                                                                                                                                                                  • kill -9 PID 给进程发送死亡信号
                                                                                                                                                                                  • pstree -h 可以查看进程树
                                                                                                                                                                                    • 运行多个 python3 sleep.py 的话
                                                                                                                                                                                      • 各个进程独立
                                                                                                                                                                                      • python3 sleep.py 大概 7M
                                                                                                                                                                                      • 各占内存
                                                                                                                                                                                        • 这个切进程很好用
                                                                                                                                                                                          • 不过运行进程的时候总是满屏刷时间
                                                                                                                                                                                            相关文章
                                                                                                                                                                                            |
                                                                                                                                                                                            2月前
                                                                                                                                                                                            |
                                                                                                                                                                                            数据采集 缓存 Java
                                                                                                                                                                                            Python vs Java:爬虫任务中的效率比较
                                                                                                                                                                                            Python vs Java:爬虫任务中的效率比较
                                                                                                                                                                                            |
                                                                                                                                                                                            2月前
                                                                                                                                                                                            |
                                                                                                                                                                                            监控 并行计算 数据处理
                                                                                                                                                                                            构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
                                                                                                                                                                                            在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
                                                                                                                                                                                            40 0
                                                                                                                                                                                            |
                                                                                                                                                                                            26天前
                                                                                                                                                                                            |
                                                                                                                                                                                            并行计算 数据处理 调度
                                                                                                                                                                                            Python中的并发编程:探索多线程与多进程的奥秘####
                                                                                                                                                                                            本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
                                                                                                                                                                                            |
                                                                                                                                                                                            27天前
                                                                                                                                                                                            |
                                                                                                                                                                                            运维 监控 Python
                                                                                                                                                                                            自动化运维:使用Python脚本简化日常任务
                                                                                                                                                                                            【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
                                                                                                                                                                                            59 3
                                                                                                                                                                                            |
                                                                                                                                                                                            27天前
                                                                                                                                                                                            |
                                                                                                                                                                                            人工智能 Shell 开发工具
                                                                                                                                                                                            [oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
                                                                                                                                                                                            本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
                                                                                                                                                                                            18 1
                                                                                                                                                                                            |
                                                                                                                                                                                            1月前
                                                                                                                                                                                            |
                                                                                                                                                                                            运维 监控 Linux
                                                                                                                                                                                            自动化运维:如何利用Python脚本优化日常任务##
                                                                                                                                                                                            【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
                                                                                                                                                                                            |
                                                                                                                                                                                            1月前
                                                                                                                                                                                            |
                                                                                                                                                                                            人工智能 Python
                                                                                                                                                                                            [oeasy]python039_for循环_循环遍历_循环变量
                                                                                                                                                                                            本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
                                                                                                                                                                                            32 4
                                                                                                                                                                                            |
                                                                                                                                                                                            1月前
                                                                                                                                                                                            |
                                                                                                                                                                                            调度 iOS开发 MacOS
                                                                                                                                                                                            python多进程一文够了!!!
                                                                                                                                                                                            本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
                                                                                                                                                                                            63 1
                                                                                                                                                                                            |
                                                                                                                                                                                            2月前
                                                                                                                                                                                            |
                                                                                                                                                                                            Python
                                                                                                                                                                                            Python中的多线程与多进程
                                                                                                                                                                                            本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
                                                                                                                                                                                            |
                                                                                                                                                                                            2月前
                                                                                                                                                                                            |
                                                                                                                                                                                            存储 Python
                                                                                                                                                                                            [oeasy]python038_ range函数_大小写字母的起止范围_start_stop
                                                                                                                                                                                            本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
                                                                                                                                                                                            25 1