Linux系统中进程的状态(STAT)

在Linux系统中,进程的状态(STAT)由多个字符组成,每个字符代表不同的信息。以下是常见的进程状态标识符及其含义:

主要状态标识符

  • R: Running or runnable (on run queue) - 正在运行或处于可运行状态。
  • S: Interruptible sleep (waiting for an event to complete) - 可中断睡眠(等待某个事件完成)。
  • D: Uninterruptible sleep (usually I/O) - 不可中断睡眠(通常是等待I/O操作)。
  • T: Stopped by job control signal - 被作业控制信号停止。
  • Z: Defunct (“zombie”) process, terminated but not reaped by its parent - 僵尸进程,已终止但尚未被父进程回收。
  • X: Dead (should never be seen) - 死亡状态(不应出现)。

扩展状态标识符

除了主要状态标识符外,进程状态还可以包含其他字符,提供额外的信息:

  • <: High-priority (not nice to other users) - 高优先级。
  • N: Low-priority (nice to other users) - 低优先级。
  • L: Has pages locked into memory (for real-time and custom I/O) - 具有锁定在内存中的页面(用于实时和自定义I/O)。
  • L: Has pages locked into memory (for real-time and custom I/O) - 具有锁定在内存中的页面(用于实时和自定义I/O)。
  • s: Is a session leader - 会话领导。
  • l: Is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) - 是多线程的(使用 CLONE_THREAD,如 NPTL pthreads)。
  • +: Is in the foreground process group - 位于前台进程组。

组合示例

组合状态表示进程的多种状态属性,例如:

  • Ss: 一个会话领导,处于可中断睡眠状态。
  • R+: 一个处于可运行状态且在前台进程组中的进程。
  • Dl: 一个不可中断的睡眠状态且多线程的进程。

查看进程状态

使用 ps 命令可以查看进程的状态,示例如下:

ps -eo pid,stat,cmd

输出示例:

  PID STAT CMD
  1234 Ss   /sbin/init
  2333 R+   /usr/bin/bash
  1145 Dl   /usr/bin/io_intensive_task

在这个示例中:

  • 进程 1234 是一个会话领导(s),处于可中断睡眠状态(S)。
  • 进程 5678 处于可运行状态(R),在前台进程组中(+)。
  • 进程 9101 处于不可中断睡眠状态(D),且是多线程的(l)。
    在Linux中,进程的挂起、激活、阻塞和运行可以通过发送信号和执行命令来控制。以下是一些常见的方法和示例:

1. 挂起进程

挂起一个进程可以使用 SIGSTOP 信号。这将使进程停止运行,直到收到继续执行的信号。

kill -SIGSTOP <pid>

其中,<pid> 是你想要挂起的进程的进程ID。

2. 激活(恢复)进程

激活一个被挂起的进程可以使用 SIGCONT 信号。这将使进程从挂起状态恢复到运行状态。

kill -SIGCONT <pid>

3. 阻塞进程

阻塞进程通常是指进程在等待某个事件(如I/O操作)完成时进入的状态。在代码中,通常通过调用系统调用来实现,如 read()write()sleep() 等。这些操作不需要手动发送信号,只要进程尝试执行这些操作就会自动进入阻塞状态。

示例:阻塞进程等待输入

创建一个简单的C程序,演示进程如何因等待输入而阻塞:

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("Waiting for input...\n");
    char buffer[100];
    read(STDIN_FILENO, buffer, sizeof(buffer));
    printf("Input received: %s\n", buffer);
    return 0;
}

编译并运行这个程序:

gcc -o block_example block_example.c
./block_example

在你输入内容并按回车之前,进程会一直处于阻塞状态。

4. 运行进程

运行进程是指进程正在被CPU执行。在Linux系统中,当一个进程处于可运行状态时,它会被调度器分配CPU时间片。如果进程已经在运行,则不需要额外操作。如果进程因某种原因被挂起或阻塞,可以通过发送 SIGCONT 信号来恢复运行。

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值