linux进程初阶

一.何为进程?

课本概念:程序的一个执行实例,正在执行的程序等.
内核观点:担当分配系统资源(CPU时间,内存)的实体。

二.如何描述进程?

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
课本上称之为PCB(process control block),在Linux中描述进程的结构体叫做task_struct,
task_struct是Linux内核的一种数据结构。所有运行在系统里的进程都以task_struct链表的形式存在内核里,因此对进程的管理实际上是对该PCB组成的list进行管理。

三.如何查看进程?

每个进程都有其独一无二的ID,我们可以使用一些指令来查看进程的运行状态。比如我们在这里写运行一个死循环的程序。我们可以通过ps aux来查看所有进程的信息。

当然我们也可以通过进程名or进程ID捕捉某个进程。ps aux | grep 进程名 or ID

 

 我们也可以在程序内部 通过getpid 和getppid来获取该程序的ID和PPID

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
 
int main()
{
    printf("pid: %d\n", getpid());
    printf("ppid: %d\n", getppid());
    return 0;
}

四.何为子进程以及如何创建子进程?

子进程:子进程指的是由另一进程(对应称之为父进程)所创建的进程。 子进程继承了对应的父进程的大部分属性,在刚创建时,子进程一开始就是父进程的副本,创建完成后,子进程可以根据需要执行其他程序,即进程之间存在相互独立性。 一个进程可能下属多个子进程。

OS提供了一个fork函数来创建子进程,创建子进程成功后,给子进程返回0,给父进程返回其创建的子进程ID,所以在创建之后往往要通过IF语句来使父子进程分别进入不同的代码段。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
 
int main()
{
    int ret = fork();
    if(ret < 0){
        perror("fork");
        return 1;
    }
    else if(ret == 0){ //child
        printf("I am child : %d!, ret: %d\n", getpid(), ret);
    }else{ //father
        printf("I am father : %d!, ret: %d\n", getpid(), ret);
    }
    sleep(1);
    return 0;
}

五.进程的状态都有哪些?

R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列
里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠
T停止状态(stopped):可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

两种特殊的状态:

僵尸状态:僵死状态(Zombies)是一个比较特殊的状态。当一个子进程退出时,其父进程(使用wait()系统调用)会对其进行“收尸”,但是因为某种原因父进程并没有感知到其某一子进程已经结束,那么该子进程就会变成一个僵尸进程。

僵尸进程是非常特殊的一种,它是已经结束了的进程,但是没有从进程表中删除。太多了会导致进程表里面条目满了,进而导致系统崩溃,倒是不占用其他系统资源,可以理解为:其所占用的资源已经被释放了,只剩下其PCB的一个空壳。

孤儿状态:与僵尸进程相反,当父进程先退出,其子进程无人来回收是,则将其子进程称之为“孤儿进程”,孤儿进程随后会被1号init进程领养,当然要由init进程回收。

六.进程如何确定优先级?

PRI and NI 
PRI即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小,进程的优先级别越高
NI就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值
PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行.所以,调整进程优先级,在Linux下,就是调整进程nice值,nice其取值范围是-20~19.

修改nice值

使用top进入,然后按r后输入进程的pid,回车后就可以填入想修改的nice值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值