Linux —— 进程状态
发布人:shili8
发布时间:2024-12-26 18:19
阅读次数:0
**Linux进程状态**
在 Linux 中,进程(Process)是系统中正在执行的程序或线程。每个进程都有一个唯一的 ID 号,可以通过 `ps` 命令查看。进程可以处于多种状态,这些状态决定了进程当前的运行情况和优先级。
**进程状态**
Linux 中,进程可以处于以下几种状态:
1. **RUNNING**(正在执行):该进程正在被 CPU 执行。
2. **SLEEPING**(睡眠):该进程暂时停止了执行,等待某个事件发生,如 I/O 操作完成或信号到达。
3. **ZOMBIE**(僵尸):该进程已经结束,但其父进程尚未收到通知,因此仍然占用系统资源。
4. **STOPPED**(停止):该进程被暂停,等待某个事件发生,如信号到达或 I/O 操作完成。
**进程状态转换**
进程可以在这些状态之间进行转换。例如:
* 当一个进程执行完毕时,它会进入 ZOMBIE 状态,直到其父进程收到通知并处理它。
* 当一个进程接收到信号时,它可能会进入 STOPPED 或 SLEEPING 状态,等待进一步的操作。
**进程状态查看**
可以使用以下命令查看进程当前的状态:
bashps -o stat,pid,cmd
该命令会显示每个进程的状态、ID 和名称。例如:
STAT PID CMDR1234 bashS5678 sshdZ9012 sshd (僵尸)
**进程状态控制**
可以使用以下命令控制进程当前的状态:
* `kill` 命令:杀死一个进程,强制其进入 ZOMBIE 状态。
* `kill -STOP` 命令:暂停一个进程,使其进入 STOPPED 状态。
* `kill -CONT` 命令:恢复一个进程的执行,使其进入 RUNNING 状态。
例如:
bashkill1234
该命令会杀死进程 ID 为1234 的进程。
**进程状态示例代码**
以下是使用 Python 编写的一个示例程序,演示了如何查看和控制进程当前的状态:
import psutildef get_process_status(pid): try: process = psutil.Process(pid) return process.status() except psutil.NoSuchProcess: return "No such process" def kill_process(pid): try: os.kill(pid,9) # SIGKILL print(f"Process {pid} killed") except OSError as e: print(f"Error killing process {pid}: {e}") def pause_process(pid): try: os.kill(pid,19) # SIGSTOP print(f"Process {pid} paused") except OSError as e: print(f"Error pausing process {pid}: {e}") def resume_process(pid): try: os.kill(pid,18) # SIGCONT print(f"Process {pid} resumed") except OSError as e: print(f"Error resuming process {pid}: {e}") if __name__ == "__main__": pid = int(input("Enter the process ID: ")) status = get_process_status(pid) print(f"Status: {status}") choice = input("Do you want to kill, pause or resume the process? (k/p/r): ") if choice.lower() == "k": kill_process(pid) elif choice.lower() == "p": pause_process(pid) elif choice.lower() == "r": resume_process(pid)
该示例程序使用 `psutil` 库来查看和控制进程当前的状态。