linux 进程管理---进程环境和属性总结

本文深入探讨了进程管理的基本概念,包括进程资源、用户级进程状态和关键属性,如进程号、父进程号和进程组号。通过实例展示了如何在用户层获取这些信息,并解释了各状态的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.进程资源:

进程:系统下用户管理事物的基本单元,每个进程有自己独立的运行空间。

管理每个进程的资源的结构体:struct task_struct(定义在内核头文件include/linux/sched.h)

结构体task_struct 包含的信息:线程基本信息,内存信息,tty终端信息,当前目录信息,打开文件描述符信息信号信息以及进程属性


2.用户级进程状态:

就绪/运行状态TASK_RUNNING:正在运行或处于就绪状态。

可被中断等待(TASK_INTERRUPTIBLE):处于等待队伍中,等待资源有效时唤醒,可中断。

不可被中断等待(TASK_UNINTERRUPTIBLE):处于等待队伍中,等待资源有效时唤醒,但不中断。

死状态(TASK_ZOMBIE):即将从任务链表中删除,但在task仍然有一个task_struct数据结构,等待父进程释放。

停止状态(TASK_STOPPED):进程已经结束,已经释放了相应的资源,但未释放进程控制块,可以被唤醒。


3.进程基本属性:

3.1.进程号(PID)不能修改:系统维护的唯一表示一个进程的正整数,无法在用户层修改。

调用getpid()获取当前进程的pidgetpid()在/usr/include/unistd.h中明),若失败返回-1

实例:

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

        printf("the current program's pid is %d\n",getpid());

        return 0;

}

3.2父进程号(ppid),不能修改:定义如下

#include<unistd.h>

extern __pid_t getppid(void);

成功返回当前进程的父进程PID 错误返回 -1,错误原因存储在errno

应用实例

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

        printf("the current program's ppid is %d\n",getppid());

        return 0;

}

运行结果:

root@ubuntu:/home/administrator/Desktop# gcc -o test test.c
[1]+  Done                    ./test 1
root@ubuntu:/home/administrator/Desktop# ./test
the current program's ppid is 3570
3.3 进程组号(PGID),一个或多个进程的集合,定义如下:

#include<unistd.h>

extern __pid_t getpgid(__pid_t pid);

应用实例:

#include<stdio.h>

#include<unistd.h>

int main(int argc, char *argv[])

{
    int i;
    printf("\t pid\t ppid \t pgid\n");
    printf("parent\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));
    for(i=0;i<2;i++)
        if (fork()==0) printf("child\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));
    return 0;
}

程序运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值