2016 - 2024

感恩一路有你

linux信号差解决方案 linux怎么调试?

浏览量:1123 时间:2023-05-07 19:39:32 作者:采采

linux怎么调试?

1.使用#39print#39语句

这是调试问题的基本方法。我们在程序中可疑的地方插入print语句,了解程序的运行过程,控制流和变量值的变化。

它的缺点是需要编辑程序,添加#39print#39语句,并且必须重新编译重新运行才能得到输出。如果要调试的程序很大,这将是一个费时费力的方法。

2、使用查询

在某些情况下,我们需要了解内核中运行的进程的状态和内存映射。为了获得这一信息,我们不 不需要在内核中插入任何代码。相反,您可以使用/proc文件系统。在/proc的伪文件系统中,运行信息(cpu信息、内存容量等。)在系统开始运行时收集的数据被保留。

对于系统中运行的每个进程,ls -l /proc的输出结果有一个以/proc文件系统中的进程id命名的项。每个进程的详细信息可以在进程id对应的目录下的文件中获得。您也可以输出#39ls /proc/pid#39。

免费视频教程推荐:linux视频教程

3.使用跟踪

Strace和ltrace是Linux中用来跟踪程序执行细节的两个跟踪工具。

strac:

Strace截获并记录系统调用和它接收到的信号。对于用户,它显示系统调用、传递给它们的参数和返回值。Strace可以附加到已经运行的进程或新进程。作为开发人员和系统管理员的诊断和调试工具,它非常有用。

它还可以作为一种工具,通过跟踪不同的程序调用来了解系统。这个工具的优点是不需要源代码,程序也不需要重新编译。

使用strace的基本语法是:

斯特拉思 的输出很长,所以我们通常对显示的每一行都不感兴趣。我们可以使用#39-e expr#39选项来过滤不需要的数据。

使用#39-p pid#39选项绑定到正在运行的进程。

使用#39-o#39选项,可以将命令的输出重定向到一个文件。

Strace只过滤系统调用的输出。

ltrac:

Ltrace跟踪并记录进程的调用。;的动态(运行时)库和它接收的信号。它还可以跟踪进程发出的系统调用。其用法类似于strace。

#39-i#39选项在调用库时打印指令指针。

#39-S#39选项用于实现系统调用和库调用。

Trace捕获#39STRCMP#39库调用的输出。

相关文章教程推荐:linux教程

那个 李nux中程序调试的方法有哪些细节?

linux进程调度的三种策略是什么?

进程调度策略是调度系统将在CPU上运行哪个进程。

这种调度分两层考虑。

第一级,进程状态,是最高优先级,即最高优先级。

在linux中,只有处于就绪状态的进程可以被调度和选择然后占用CPU,其他状态的进程不能占用CPU。

下面是进程在linux中的状态:TASK_RUNNING:就绪状态,当你得到CPU后就可以运行它了。

TASK _ int: ;■浅睡眠时,资源到位或收到信号就会变得准备就绪。

TASK_UNINT:进入深度睡眠,当资源到位时,他将进入就绪状态,不会响应信号。

TASK_ZOMBIE: dead状态,进程退出后。

TASK_STOPPED:暂停状态,收到SIG_CONT信号后的就绪状态。

第二层,实际上是在操作系统中实现的,就是把所有准备好的进程链接成一个队列,调度进程时只考虑这个队列中的进程,不考虑其他进程,实现了第一层中的要求。

下一步是就绪队列中的进程之间的竞争。

Linux采用三种不同的调度策略,SCHED_FIFO(以下简称FIFO,先来先服务),SCHED_RR(以下简称RR,时间片轮换)和SCHED_OTHER(以下简称OTHER)。

在这里,你可以看到一个问题。具有相同调度策略的进程自然具有可比性,Linux3的三种调度策略并存。那么采用不同调度策略的进程如何比较呢?可以说两者没有可比性。

其实调度的时候,调度只看一个指标,就是每个进程的权重,权重最大,在可执行队列中排名第一的,就会被调度执行。

但是权重的计算会设计到各种因素,其中调度策略可以说是权重计算中最重的。

Linux为什么要这么做?这是由交易的多样性决定的。有两种进程:实时进程和非实时进程。FIFO和RR用于支持实时进程的调度。让 s来看看FIFO和RR这三种策略下权重的计算公式,以及权重为1000的进程实际运行时间的计算公式。当时间片为0时,权重为0。当时间片不为0时,权重的剩余时间片为20-nice,同时,如果内核线程有一个小的奖金1,这是因为内核线程没有 t不需要切换用户空间,所以给它一个奖励,奖励他在切换过程中的低开销。

时间电影很容易理解,很好这个值,用过linux系统的人都知道,是从unix继承来的概念,表示谦逊,是20到-19的数字,可以通过nice和renice指令设置。

从代码中也可以看出,值越小,对别人就越不谦逊。

由此我们可以看出,FIFO和RR至少有1000个基数,所以当有FIFO和RR调度策略进程时,其他进程就没有机会被调度了。

同时,从权重计算公式中可以看出,FIFO先来先服务调度策略得到满足,但是RR,时间片轮换的调度,如果按照这个权重计算,就不能满足时间片轮换的概念。

这里只是权重的计算,RR策略的流程在调度时有特殊处理。

以上都是重量计算。让 让我们来看看真正的日程安排过程。首先,它是RR策略过程的特殊处理。如果当前进程采用RR策略,就要看他的时间片是否用完。当它用完时,它将被踢到就绪队列的末尾,他的时间片将被恢复。

然后便于整个就绪队列找到权重最大的第一个进程运行。

总体的调度效果是,如果有带FIFO和RR策略的进程,就先调度,两者之间的时间长短决定胜负,而两个策略遵守各自的调度策略。

其他只有在前两种在就绪队列中不存在时才能执行。他们其实是轮流执行的,但是他们之间的胜负取决于剩余时间和NICE值。

同时,就绪队列中的最高优先级被赋予相同的权重。

进程 系统 策略 调度 时间

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。