py进程

"""
现代操作系统(window,mac os,linux) 都支持多任务

什么叫多任务?
操作系统可以同时运行多个任务。

单核cpu实现多任务原理: 操作系统轮流让各个任务交替执行,例如:QQ执行2ms,切换到WX再执行2ms,
表面上看每个任务反复执行下去,但是cpu调度执行速度太快了,导致我们感觉所有的的任务都在同时执行。

多核cpu实现多任务原理: 真正的并行执行多任务只能在多核cpu上实现,但是由于任务数量远远多于cpu的核心数量,
所以操作系统也会自动把很多任务轮流调度到每个核心上执行。
并发: 看上去一起执行,任务数多于cpu核心数。
并行: 真正的一起执行,任务数小于等于cpu核心数。

实现多任务的方式有哪些:
1.多进程模式
2.多线程模式
3.协程模式
4.多进程+多线程模式

对于操作系统而言,一个任务就是一个进程

进程是系统中程序执行和资源分配的基本单位,每个进程都有自己的数据段,代码段,堆栈段。
"""

"""
multiprocessing 库
跨平台版本多进程模块,提供一个Process类来代表一个进程对象
"""

from multiprocessing import Process
from time import sleep
import os


def run(sss):
while True:
# os.getpid() 打印当前进程id
# os.getppid() 打印当前进程的父进程id
print("hello %s --- %s --- %s" % (sss, os.getpid(), os.getppid()))
sleep(2)


if __name__ == '__main__':
print("主进程启动 --- %s" % os.getpid())

# 创建一个进程
# target进程执行的任务
p = Process(target=run, args=("lbc",))

# 启动进程
p.start()

while True:
print("hello wws --- %s" % os.getpid())
sleep(1)

转载于:https://www.cnblogs.com/ioswws/p/10118075.html

在Linux或Windows系统中,可以通过多种方式终止Python进程。以下是详细的方法和注意事项: --- ### **1. 通过命令行终止Python进程** #### **(1) 查找Python进程PID** - **Linux/macOS**: ```bash ps aux | grep python ``` 或更精确地查找特定脚本: ```bash pgrep -f "your_script.py" ``` - **Windows(CMD/PowerShell)**: ```cmd tasklist | findstr python ``` 或使用PowerShell: ```powershell Get-Process | Where-Object { $_.Name -like "python*" } ``` #### **(2) 终止进程** - **Linux/macOS**: ```bash kill -9 <PID> # 强制终止单个进程 pkill -f "your_script.py" # 通过名称匹配终止 ``` - **Windows**: ```cmd taskkill /PID <PID> /F # 强制终止 taskkill /IM python.exe /F # 终止所有Python进程 ``` --- ### **2. 在Python代码中终止自身或其他Python进程** #### **(1) 终止当前脚本** ```python import os import sys # 方法1:直接退出 sys.exit(0) # 正常退出(可返回状态码) # 方法2:强制终止(不推荐,可能不释放资源) os._exit(1) ``` #### **(2) 终止其他Python进程** ```python import os import signal import psutil # 需要安装:pip install psutil def kill_python_process(name): for proc in psutil.process_iter(['pid', 'name', 'cmdline']): if proc.info['name'] == 'python' and name in ' '.join(proc.info['cmdline']): try: os.kill(proc.info['pid'], signal.SIGTERM) print(f"Killed process {proc.info['pid']}") except psutil.NoSuchProcess: pass # 示例:终止所有运行"your_script.py"的Python进程 kill_python_process("your_script.py") ``` --- ### **3. 终止子进程** 如果Python脚本启动了子进程(如通过`subprocess`),需确保正确终止: ```python import subprocess import signal import os # 启动子进程 proc = subprocess.Popen(["python", "child_script.py"]) # 终止子进程 proc.terminate() # 发送SIGTERM proc.kill() # 强制终止(SIGKILL) # 如果子进程进程组组长(如通过shell启动),终止整个组 os.killpg(os.getpgid(proc.pid), signal.SIGTERM) ``` --- ### **4. 通过端口号终止进程** 如果Python进程绑定了特定端口(如Flask/Django服务),可通过端口查找并终止: - **Linux/macOS**: ```bash lsof -i :5000 # 查找占用5000端口的进程 kill -9 <PID> # 终止对应进程 ``` - **Windows**: ```cmd netstat -ano | findstr :5000 taskkill /PID <PID> /F ``` --- ### **5. 注意事项** 1. **权限问题**: - 普通用户只能终止自己的进程,`root`或管理员权限可终止所有进程。 - 在Linux中,使用`sudo`执行终止命令。 2. **强制终止的风险**: - `kill -9`(`SIGKILL`)会立即终止进程,可能导致资源未释放(如临时文件未删除)。 - 优先尝试`SIGTERM`(15),允许进程清理后退出。 3. **进程名匹配**: - 在`pkill`或`psutil`中,避免误杀其他Python进程(如通过完整路径或参数匹配)。 4. **Windows的Python进程名**: - 可能显示为`python.exe`或`python3.9.exe`,需根据实际名称终止。 --- ### **6. 自动化脚本示例** ```python import os import signal import time def start_and_kill_process(): # 启动一个长期运行的子进程 proc = subprocess.Popen(["python3", "-c", "import time; time.sleep(100)"]) print(f"Started process PID: {proc.pid}") # 等待5秒后终止 time.sleep(5) try: os.kill(proc.pid, signal.SIGTERM) print("Process terminated gracefully.") except ProcessLookupError: print("Process already terminated.") start_and_kill_process() ``` --- ### **7. 常见问题解答** #### **Q1: 为什么`kill <PID>`无效?** - 进程可能处于僵尸状态(已终止但未被父进程回收),需重启父进程或使用`SIGKILL`。 - 进程可能忽略了`SIGTERM`,尝试`kill -9 <PID>`。 #### **Q2: 如何终止所有Python进程?** - **Linux**: ```bash pkill -9 python ``` - **Windows**: ```cmd taskkill /IM python.exe /F ``` #### **Q3: 如何避免子进程成为孤儿进程?** - 在父进程中使用`try/finally`确保子进程被终止: ```python proc = subprocess.Popen(...) try: # 主逻辑 finally: proc.terminate() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值