[oeasy]python0031_挂起进程_恢复进程_进程切换

简介: [oeasy]python0031_挂起进程_恢复进程_进程切换

 

查看进程

回忆上次内容

    • 上次修改了 $PATH 路径
      • 把当前用户shiyanlou的宿主文件夹 ~
        • 添加到 $PATH
          • 这样 sleep.py 就可以被找到
          • 于是就可以被执行了
            • 还可以把配置 $PATH 的脚本
              • 放到 zsh的配置文件(~/.zshrc) 中
              • 配置 ~/.zshrc 就可以
                • 设置 zsh 环境下默认的 $PATH
                    • 在当前路径运行 sleep.py
                      • python 程序第 1 行
                        • 声明打开方式为 python3
                          • /usr/bin/python3
                            • 从硬盘调用到内存
                              • 成为一个进程
                                • 不断输出时间
                                  • ctrl+c结束进程

                                        image.gif编辑

                                          • 我想看到 python3 这个进程
                                            • 可能吗?🤔

                                              进行搜索

                                                • 如果我想查看进程
                                                  • 也需要运行相应的进程查看命令ps
                                                  • 但是如果 sleep.py 持续输出时间
                                                  • 我是没有办法运行ps命令的

                                                    image.gif编辑

                                                      • 我需要把 sleep.py 转到后台运行
                                                        • 然后查询进程信息

                                                          切到后台

                                                            • 切换的方法比较简单
                                                              • ctrl + z
                                                                • 当前进程前台
                                                                • 切换到 后台并暂停
                                                                  • 简单来说就是不给他用cpu了
                                                                  • suspended(挂起了)

                                                                    image.gif编辑

                                                                      • 可以把后台进程切换回前台吗?

                                                                      前后台切换

                                                                        • 所谓把 进程 切换到后台
                                                                          • 就是停止不断把时间输出到标准输出流
                                                                            • sleep.py这个进程从前台切换到后台并暂停
                                                                              • 而且把控制权交回给shell
                                                                                • 可以继续输入命令了
                                                                                    • 那能否反过来?
                                                                                      • 把进程从 后台(background)
                                                                                      • 切换到 前台 (foreground)呢?

                                                                                        image.gif编辑

                                                                                          • fg
                                                                                            • 怎么理解fg呢?

                                                                                              fg

                                                                                                • foreground的意思就是
                                                                                                  • 离观察者更近的前景

                                                                                                    image.gif编辑

                                                                                                      • fore的意思是前面的
                                                                                                        • before 在前面的
                                                                                                        • first 最前面的第一个
                                                                                                        • former 曾经的
                                                                                                        • forth 向前
                                                                                                        • forward 向前进
                                                                                                        • far 前进的太多了就远了
                                                                                                        • further 比远还要进一步的
                                                                                                        • 象声词
                                                                                                        • 词根来自*per

                                                                                                          *per

                                                                                                            • 象声词
                                                                                                              • 来自于投掷

                                                                                                                image.gif编辑

                                                                                                                  • pro-词根
                                                                                                                    • prohibit = pro + forbid 事先禁止
                                                                                                                    • provide = pro + view 事先看过
                                                                                                                    • promise = pro + mission 事前承诺使命
                                                                                                                    • promote 促进
                                                                                                                    • profit 利润
                                                                                                                    • project 投影
                                                                                                                    • process 步骤、进展
                                                                                                                      • 在计算机中
                                                                                                                        • process也指进程
                                                                                                                        • 内存里面的一段空间

                                                                                                                          foreground

                                                                                                                            • foreground(前台)
                                                                                                                              • fg 命令把 后台 进程放回 前台
                                                                                                                              • 把挂起的进程重新又放到前台
                                                                                                                              • cpu又可以给这个进程用了

                                                                                                                                image.gif编辑

                                                                                                                                  • 但是这个我怎么知道他到后台是否暂停了呢?

                                                                                                                                  挂起

                                                                                                                                    • 将show_time.py挂起后
                                                                                                                                      • 重新编辑show_time.py
                                                                                                                                      • 每行输出一个数字
                                                                                                                                      • 数字自增

                                                                                                                                        #!/usr/bin/python

                                                                                                                                        i = 0

                                                                                                                                        import time

                                                                                                                                        while True:

                                                                                                                                           i = i + 1

                                                                                                                                           print(i, "===", time.asctime())

                                                                                                                                           time.sleep(1)

                                                                                                                                          • 保存并退出
                                                                                                                                          • 恢复刚才放到后台并暂停的show_time.py

                                                                                                                                          image.gif编辑

                                                                                                                                            • 没有在前面加上标号数字
                                                                                                                                            • 这是为什么呢?🤔
                                                                                                                                            • 明明已经保存修改了呀?🤔

                                                                                                                                            进程

                                                                                                                                              • 因为我们启动 python3 show_time.py 的时候
                                                                                                                                                • 是在修改之前
                                                                                                                                                • 从硬盘读取 show_time.py
                                                                                                                                                  • 放入内存的时候
                                                                                                                                                    • 还没有被修改成
                                                                                                                                                      • 要输出数字编号
                                                                                                                                                        • 这个进程在内存中
                                                                                                                                                          • 始终还是原来调用时的样子
                                                                                                                                                          • 也就是修改前的样子
                                                                                                                                                              • 我们在硬盘上文件的修改
                                                                                                                                                                • 对已经运行了的进程不起作用
                                                                                                                                                                  • 那怎么办?

                                                                                                                                                                  重启进程

                                                                                                                                                                    • 先将进程放回前台
                                                                                                                                                                      • 再ctrl + c
                                                                                                                                                                      • 结束这个进程

                                                                                                                                                                        image.gif编辑

                                                                                                                                                                          • 最后重新运行
                                                                                                                                                                            • python3 show_time.py
                                                                                                                                                                              • 这样硬盘中修改了的python文件
                                                                                                                                                                                • 就会被作为新进程重新载入内存
                                                                                                                                                                                • 新修改就生效了
                                                                                                                                                                                  • 这个ctrl + z
                                                                                                                                                                                  • 真的会暂停进程吗?

                                                                                                                                                                                  暂停

                                                                                                                                                                                    • 运行程序后
                                                                                                                                                                                      • 挂起进程
                                                                                                                                                                                      • 等待一段时间
                                                                                                                                                                                      • 恢复进程

                                                                                                                                                                                        image.gif编辑

                                                                                                                                                                                          • 还是从5开始
                                                                                                                                                                                            • 没有在后面偷偷跑
                                                                                                                                                                                              • 如果我就想让这个进程
                                                                                                                                                                                                • 在后台偷偷跑呢?

                                                                                                                                                                                                  bg

                                                                                                                                                                                                    • 先ctrl + z 挂起进程
                                                                                                                                                                                                      • 然后运行 bg

                                                                                                                                                                                                        image.gif编辑

                                                                                                                                                                                                          • 程序继续跑起来
                                                                                                                                                                                                          • 而且不断输出到标准输出流
                                                                                                                                                                                                          • 甚至连ctrl + c 都无法结束进程了
                                                                                                                                                                                                          • 这可怎么办呢?

                                                                                                                                                                                                          总结

                                                                                                                                                                                                            • 进程前后台切换
                                                                                                                                                                                                              • ctrl + z 把当前进程切换到后台并暂停
                                                                                                                                                                                                              • fg 可以把进程再切回前台
                                                                                                                                                                                                              • bg 可以让进程在后台持续运行
                                                                                                                                                                                                                • 但是问题就是根本停不下来!
                                                                                                                                                                                                                • process 真的就
                                                                                                                                                                                                                  • 不断pro - pro - pro
                                                                                                                                                                                                                  • 或者说foreword - foreword - foreword 跑起来了

                                                                                                                                                                                                                    image.gif编辑

                                                                                                                                                                                                                      相关文章
                                                                                                                                                                                                                      聊聊python多线程与多进程
                                                                                                                                                                                                                      为什么要使用多进程与多线程呢? 因为我们如果按照流程一步步执行任务实在是太慢了,假如一个任务就是10秒,两个任务就是20秒,那100个任务呢?况且cpu这么贵,时间长了就是浪费生命啊!一个任务比喻成一个人,别个做高铁,你做绿皮火车,可想而知!接下来我们先看个例子:
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      5天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      监控 Unix 开发者
                                                                                                                                                                                                                      Python 3.9的多进程优化策略具体是如何实现的?
                                                                                                                                                                                                                      【7月更文挑战第2天】Python 3.9的多进程优化策略具体是如何实现的?
                                                                                                                                                                                                                      10 1
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      5天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      开发者 Python
                                                                                                                                                                                                                      Python 3.9的异步编程和多进程优化有哪些改进?
                                                                                                                                                                                                                      【7月更文挑战第2天】Python 3.9的异步编程和多进程优化有哪些改进?
                                                                                                                                                                                                                      9 1
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      11天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      开发框架 并行计算 安全
                                                                                                                                                                                                                      Python的GIL限制了CPython在多核下的并行计算,但通过替代解释器(如Jython, IronPython, PyPy)和多进程、异步IO可规避
                                                                                                                                                                                                                      【6月更文挑战第26天】Python的GIL限制了CPython在多核下的并行计算,但通过替代解释器(如Jython, IronPython, PyPy)和多进程、异步IO可规避。Numba、Cython等工具编译优化代码,未来社区可能探索更高级的并发解决方案。尽管GIL仍存在,现有策略已能有效提升并发性能。
                                                                                                                                                                                                                      19 3
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      13天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      Python
                                                                                                                                                                                                                      Python多进程编程详细剖析
                                                                                                                                                                                                                      Python多进程编程详细剖析
                                                                                                                                                                                                                      16 3
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      17天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      安全 Java Python
                                                                                                                                                                                                                      GIL是Python解释器的锁,确保单个进程中字节码执行的串行化,以保护内存管理,但限制了多线程并行性。
                                                                                                                                                                                                                      【6月更文挑战第20天】GIL是Python解释器的锁,确保单个进程中字节码执行的串行化,以保护内存管理,但限制了多线程并行性。线程池通过预创建线程池来管理资源,减少线程创建销毁开销,提高效率。示例展示了如何使用Python实现一个简单的线程池,用于执行多个耗时任务。
                                                                                                                                                                                                                      21 6
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      13天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      算法 API 调度
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      18天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      Python Windows
                                                                                                                                                                                                                      在 Windows 平台下打包 Python 多进程代码为 exe 文件的问题及解决方案
                                                                                                                                                                                                                      在使用 Python 进行多进程编程时,在 Windows 平台下可能会出现将代码打包为 exe 文件后无法正常运行的问题。这个问题主要是由于在 Windows 下创建新的进程需要复制父进程的内存空间,而 Python 多进程机制需要先完成父进程的初始化阶段后才能启动子进程,所以在这个过程中可能会出现错误。此外,由于没有显式导入 Python 解释器,也会导致 Python 解释器无法正常工作。为了解决这个问题,我们可以使用函数。
                                                                                                                                                                                                                      21 5
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      20天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      数据挖掘 调度 开发者
                                                                                                                                                                                                                      Python并发编程的艺术:掌握线程、进程与协程的同步技巧
                                                                                                                                                                                                                      并发编程在Python中涵盖线程、进程和协程,用于优化IO操作和响应速度。`threading`模块支持线程,`multiprocessing`处理进程,而`asyncio`则用于协程。线程通过Lock和Condition Objects同步,进程使用Queue和Pipe通信。协程利用异步事件循环避免上下文切换。了解并发模型及同步技术是提升Python应用性能的关键。
                                                                                                                                                                                                                      42 5
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      19天前
                                                                                                                                                                                                                      |
                                                                                                                                                                                                                      数据采集 自然语言处理 调度
                                                                                                                                                                                                                      【干货】python多进程和多线程谁更快
                                                                                                                                                                                                                      【干货】python多进程和多线程谁更快
                                                                                                                                                                                                                      17 2