首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux "clock()“函数是否计入进程的”睡眠“时间?

clock() 函数在 Linux 系统中用于获取进程运行的 CPU 时间,它测量的是进程在用户态和内核态中执行指令所花费的时间。clock() 函数返回的时间单位是 CLOCKS_PER_SEC,通常等于系统的时钟频率。

clock() 函数不会计入进程的“睡眠”时间。当进程进入睡眠状态时(例如,等待 I/O 操作完成),它不会消耗 CPU 时间,因此 clock() 函数返回的时间不会增加。只有当进程实际执行指令时,clock() 函数返回的时间才会增加。

如果你需要测量进程的总运行时间(包括睡眠时间),可以使用 getrusage()times() 函数。这些函数提供了更全面的进程时间信息,包括用户态时间、内核态时间以及睡眠时间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于 Linux 进程的睡眠和唤醒 ,来看这篇就够了~

1 Linux 进程的睡眠和唤醒 在 Linux 中,仅等待 CPU 时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为 TASK_RUNNING。...一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对 CPU 的控制权,并且从运行队列中选择一个合适的进程投入运行。 当然,一个进程也可以主动释放 CPU 的控制权。...我们可以使用下面的这个函数将刚才那个进入睡眠的进程唤醒。...在这个时间片内,B 进程执行完了它所有的指令,因此它试图唤醒 A 进程,而此时的 A 进程还没有进入睡眠,所以唤醒操作无效。...这样无论进程等待的条件是否满足, 进程都不会因为被移出就绪队列而错误地进入睡眠状态,从而避免了无效唤醒问题。

2.4K90

关于 Linux 进程的睡眠和唤醒 ,来看这篇就够了~

1 Linux 进程的睡眠和唤醒 在Linux 中,仅等待 CPU 时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为 TASK_RUNNING。...一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对 CPU 的控制权,并且从运行队列中选择一个合适的进程投入运行。 当然,一个进程也可以主动释放 CPU 的控制权。...我们可以使用下面的这个函数将刚才那个进入睡眠的进程唤醒。...在这个时间片内,B 进程执行完了它所有的指令,因此它试图唤醒 A 进程,而此时的 A 进程还没有进入睡眠,所以唤醒操作无效。...这样无论进程等待的条件是否满足, 进程都不会因为被移出就绪队列而错误地进入睡眠状态,从而避免了无效唤醒问题。

7.7K10
  • 深入理解Linux内核之进程睡眠(下)

    当任务睡眠完成,定时器超时,会调用之前在__hrtimer_init_sleeper设置的超时回调函数hrtimer_wakeup将睡眠的任务唤醒(关于进程唤醒在这里就不在赘述,在后面的进程唤醒专题文章在进行详细解读...总结:处于用户态的任务,如果想要睡眠一段时间必须向内核请求服务(如调用clock_nanosleep系统调用),内核中会设置一个高精度定时器,来记录要睡眠的任务,然后设置任务状态为可中断的睡眠状态,紧接着发生主动调度...5.内核态睡眠 当任务处于内核态时,有时候也需要睡眠一段时间,不像任务处于用户态需要发生系统调用来请求内核进行睡眠,在内核态可以直接调用睡眠函数。...6.总结 进程睡眠按照应用场景可以分为:延迟睡眠和等待某些特定条件而睡眠,实际上都可以归于等待某些特定条件而睡眠,因为延迟特定时间也可以作为特定条件。...进程睡眠按照进程所处的特权级别可以分为:用户态进程睡眠和内核态进程睡眠,用户态进程睡眠需要进程通过系统调用陷入内核来发起睡眠请求。

    2.2K20

    Linux下通过grep查找指定的进程是否存在

    一、功能介绍 Linux通过命令查找指定的进程是否存在,并返回该进程的PID号。 在程序中可以使用该方法监控指定的程序是否在运行,如果异常退出,可以重新启动指定程序或者系统。...二、执行的命令 2.1 shell脚本代码 #查找指定进程的PID find_name=s_app #s_app就是要查找的进程名称 pid_val=`ps -ef | grep $find_name..."查找的进程不存在" fi 2.2 C语言代码 #include #include #include //查找指定的进程的PID号并返回...\n"); } else { printf("查找的进程PID=%d\n",pid); } return 0; } 三、检测指定程序是否存在,不存在就重新启动...$2}'` if [ ${pid_val} > 0 ] then echo "查找的进程存在" else echo "查找的进程不存在" #重新启动 /mnt/hgfs/linux-share-dir

    4.4K40

    深入理解Linux内核之进程睡眠

    当任务睡眠完成,定时器超时,会调用之前在__hrtimer_init_sleeper设置的超时回调函数hrtimer_wakeup将睡眠的任务唤醒(关于进程唤醒在这里就不在赘述,在后面的进程唤醒专题文章在进行详细解读...总结:处于用户态的任务,如果想要睡眠一段时间必须向内核请求服务(如调用clock_nanosleep系统调用),内核中会设置一个高精度定时器,来记录要睡眠的任务,然后设置任务状态为可中断的睡眠状态,紧接着发生主动调度...5.内核态睡眠 当任务处于内核态时,有时候也需要睡眠一段时间,不像任务处于用户态需要发生系统调用来请求内核进行睡眠,在内核态可以直接调用睡眠函数。...6.总结 进程睡眠按照应用场景可以分为:延迟睡眠和等待某些特定条件而睡眠,实际上都可以归于等待某些特定条件而睡眠,因为延迟特定时间也可以作为特定条件。...进程睡眠按照进程所处的特权级别可以分为:用户态进程睡眠和内核态进程睡眠,用户态进程睡眠需要进程通过系统调用陷入内核来发起睡眠请求。

    2.9K40

    Linux唤醒抢占----Linux进程的管理与调度(二十三)

    新唤醒的进程不必一定由完全公平调度器处理, 如果新进程是一个实时进程, 则会立即请求调度, 因为实时进程优先极高, 实时进程总会抢占CFS进程. 2 Linux进程的睡眠 在Linux中,仅等待CPU时间的进程称为就绪进程...一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对CPU的控制权, 并且从运行队列中选择一个合适的进程投入运行. 当然,一个进程也可以主动释放CPU的控制权....Linux 中的进程睡眠状态有两种 一种是可中断的睡眠状态,其状态标志位TASK_INTERRUPTIBLE....在Linux操作系统中, 内核的稳定性至关重要, 为了避免在Linux操作系统内核中出现无效唤醒问题, Linux内核在需要进程睡眠的时候应该使用类似如下的操作: /* ‘q’是我们希望睡眠的等待队列...2号进程的例子-避免无效抢占 下面让我们用linux内核中的实例来看看Linux 内核是如何避免无效睡眠的, 我还记得2号进程吧, 它的主要工作就是接手内核线程kthread的创建, 其工作流程函数是

    4K30

    Linux调度器如何判断进程的时间片耗尽?

    1、第一个问题:timeslice用尽的判断 在Linux内核中,调度器确实是在时钟中断(通常每隔一段时间触发,比如1毫秒)中更新每个进程的vruntime值。...在时钟中断中,调度器还会检查当前进程的时间片(timeslice)是否已经用完。...因此,timeslice的用尽和时钟中断确实有紧密的联系:调度器利用定期的时钟中断来逐步更新进程的运行状态并判断时间片是否耗尽。...当时间片耗尽时,调度器会执行上下文切换,从红黑树中选择一个新的可运行进程。 2、第二个问题:可中断睡眠进程的唤醒 对于睡眠状态的进程,首先要明确睡眠类型和信号机制的工作原理。...在Linux中,进程的睡眠状态主要分为可中断睡眠(TASK_INTERRUPTIBLE)和不可中断睡眠(TASK_UNINTERRUPTIBLE)。

    11310

    Linux核心调度器之周期性调度器scheduler_tick--Linux进程的管理与调度(十八)

    我们前面提到linux有两种方法激活调度器:核心调度器和 周期调度器 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因而内核提供了两个调度器主调度器...-0.11~2.4 O(1)调度器 linux-2.5 CFS调度器 linux-2.6~至今 1.4 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃...其间执行的主要操作是对各种计数器+1 激活负责当前进程调度类的周期性调度方法 检查进程执行的时间是否超过了它对应的ideal_runtime,如果超过了,则告诉系统,需要启动主调度器(schedule)...(&rq->lock); /* 2.1 更新rq的当前时间戳.即使rq->clock变为当前时间戳 */ update_rq_clock(rq); /* 2.2 执行当前运行进程所在调度类的...(scheduler_tick)完成该cpu上任务的周期性调度工作; 在支持动态定时器的系统中,可以关闭该调度器,从而进入深度睡眠过程;scheduler_tick查看当前进程是否运行太长时间,如果是,

    2.8K20

    Linux下查看进程的启动和运行时间

    有时需要知道某进程运行的时间,比如我想知道我sra文件转换成fq格式的转化速度。以便我做好时间安排。...:进程名 lstart:开始时间 etime:运行时间 运行结果如下: 91413 pts/0 root fastq-dump Tue May 21 10:01:44...I 5月09 0:00 [rcu_bh] USER:用户名 %CPU:进程占用的CPU百分比 %MEM:占用内存的百分比 VSZ:该进程使用的虚拟內存量(KB) RSS:该进程占用的固定內存量...(KB)(驻留中页的数量) STAT:进程的状态 START:该进程被触发启动时间 TIME:该进程实际使用CPU运行的时间 top命令 top也可以看进程信息,与ps区别如下 ps看命令执行那刻的进程信息...,top是持续监视,ctrl c退出 ps只是查看进程,而top还可以监视系统性能,如平均负载,cpu和内存的消耗 总体来说, ps主要是查看进程的,尤其你关心的进程 top主要看cpu,内存使用情况

    15.4K10

    进程睡眠原理(基于linux2.6.12.1)

    但这是被动的,不是进程控制的,也就是说,进程访问一个资源的时候,如果不能被满足,进程会被系统挂起,等到条件满足的时候,系统会唤起进程。 今天介绍的是一种进程主动睡眠的能力。...即进程自己让自己挂起,等到一定时间后,被系统唤醒(时间到或者收到信号)。这个能力由sleep函数提供。...unsigned int sleep(unsigned int seconds); 这个函数可以让进程自己挂起seconds秒。我们看看这个函数的一些说明。...即sleep函数是由操作系统的[nanosleep](http://www.man7.org/linux/man-pages/man2/nanosleep.2.html)函数实现的。...__data是在 timer.data = (unsigned long) current; 中设置的。这就是进程主动睡眠(sleep)的大致原理。

    1.3K10

    Linux内核时钟系统和定时器实现

    () alarm: alarm()函数可以设置一个定时器,在特定时间超时,并产生SIGALRM信号,如果不忽略或不捕捉该信号,该进程会被终止。...那么sleep是如何实现的?Glibc的sleep实现如下:可见其实调用alarm实现的,在alarm的基础上注册了SIGALRM信号处理函数,用于在定时器到期时,捕获到信号,回到睡眠的地方。...参数clock_id用来指定定时器时钟的类型,时钟类型有以下6种: CLOCK_REALTIME:系统实时时间,即日历时间; CLOCK_MONOTONIC:从系统启动开始到现在为止的时间; CLOCK_PROCESS_CPUTIME_ID...:本进程启动到执行到当前代码,系统CPU花费的时间; CLOCK_THREAD_CPUTIME_ID:本线程启动到执行到当前代码,系统CPU花费的时间; CLOCK_REALTIME_HR:CLOCK_REALTIME...基于周期性睡眠的定时器系统,每次只需遍历堆顶的定时器是否到期,即可。堆顶定时器超时后,继续调整堆,使其保持为小根堆并同时对堆顶定时器进行超时判断。

    3.7K30

    Linux common clock framework(1)_概述

    2)实现clock控制的通用逻辑,这部分和硬件无关。 3)将和硬件相关的clock控制逻辑封装成操作函数集,交由底层的platform开发者实现,由通用逻辑调用。...); 第二篇为底层操作函数集的解析和使用说明,面向的读者是platform clock driver的开发者,目的是掌握怎么借助clock framework管理系统的时钟资源; 第三篇为clock framework...的内部逻辑解析,面向的读者是linux kernel爱好者,目的是理解怎么实现clock framework。...很长一段时间内,kernel及driver就是使用这种方式管理和使用clock的。...而PLL的稳定时间是很长的,这段时间要把CPU交出(进程睡眠),不然就会浪费CPU。 最后,为什么会有合在一起的clk_prepare_enable/clk_disable_unprepare接口呢?

    97130

    UNIX 高级环境编程 实验一 同步与异步write的效率比较

    显示的时间应当尽量接近write操作过程所花的时间。不要将从磁盘读文件的时间计入显示结果中。 ​ 实验要求程序必须指定输出的文件名,而该文件是否按同步方式打开,则是可以选择的。.../timewrite <f1 f2 ​ 来说,这个argc[0]即为函数名,重定向符后跟着的是不计入argc参数数目及argc[]数组,此时的argc[1]=f2 ​ 对于执行代码 ..../timewrite f1 sync <f2 ​ 来说,这个argc[0]即为函数名,重定向符连带之后跟着的是不计入argc参数数目及argc[]数组,此时的argc[1]=f1,agrc[2]=“...考虑到可能有剩余,那么就需要特殊判断一下,最后是否需要多一次读入,注意开始计时是选定一个buffSize之后,然后在所有文件内容全部读入之后结束计时,利用tms结构体获得进程用户、系统所使用的CPU时间...,以及详细的区别(从原理上了解),虽说之前上过linux基础编程课,但面对第一次实验课,我在一开始还是束手无策的,只能翻书、上网查阅资料看看他人的思路,最终在自己复现一遍,最终还是感觉收获了不少(真话)

    1.3K20

    linux系统编程之信号(二):一些信号发送函数和不同精度的睡眠

    sig); kill命令是调用kill函数实现的,kill函数可以给一个指定的进程或进程组发送指定的信号,其中kill 函数的pid 参数取值不同表示不同含义,具体可man 一下。...raise函数可以给当前进程发送指定的信号(自己给自己发信号)。killpg 函数可以给进程组发生信号。这三个函数都是成功返回0,错误返回-1。...这里需要注意的是输出两次recv之后继续睡眠的时间是不一定的,也有可能是5s,即信号处理函数在调用sleep之前已经被调用(子进程先被系统调度执行),sleep未被中断。...这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。...三、setitimer 和不同精度的睡眠 1、首先来看三种不同的时间结构,如下: time_t; /* seconds */ struct timeval { long    tv_sec;

    1.2K00

    Linux CFS调度器之虚拟时钟vruntime与调度延迟--Linux进程的管理与调度(二十六)

    line 249 rq_clock_task函数返回了运行队列的clock_task成员. /* rq_of -=> return cfs_rq->rq 返回cfs队列所在的全局就绪队列 * rq_clock_task...我们也会讲到为什么这么有用的一个函数会被移除 我们可以在早期的linux-2.6.30(仅有entity_key函数)和linux-2.6.32(定义了entity_key和entity_befire...因为越重要的进程vruntime增加的越慢, 因此他们向右移动的速度也越慢, 这样其被调度的机会要大于次要进程, 这刚好是我们需要的 如果进程进入睡眠, 则其vruntime保持不变....因为每个队列min_vruntime同时会单调增加, 那么当进程从睡眠中苏醒, 在红黑树中的位置会更靠左, 因为其键值相对来说变得更小了....entity_before来实现此功能, 函数定义在linux+v2.6.32/kernel/sched_fair.c, line 269, 在我们新的linux-4.6内核中定义在kernel/sched

    3.4K63

    Android Handler机制3之SystemClock类

    该时钟是被保证为单调的,并且适用当间隔不跨越设备睡眠时间间隔定时。大多数方法接受时间戳的值就像uptimeMillis()方法。...该时钟可以被使用在当测量事件可能跨越系统睡眠的时间段。...使用该函数产生的延迟如果你不使用Thread.interrupt(),因为它会保存线程的中断状态。 在android.os.Handler类中执行异步调用的使用会用到一个绝对的时间或者相对时间的概念。...上面提到了一个概念"关于Android的深度睡眠",这里就简单介绍下: 1、Android的深度睡眠 所以Android的深度睡眠,即屏幕关闭后,一段时间不做任何操作,不连接USB,然后在一定的时间后...,手机很多服务、进程都睡眠了,不再运行了。

    1.5K20

    《Linux操作系统编程》 第六章 Linux中的进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数

    第六章 Linux中的进程监控 学习目的 使学生理解Linux中进程控制块的数据结构,Linux进程的创建、执行、终止、等待以及监控方法。并重点掌握fork函数的使用以及exec系列函数。...▪ 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等 6.1.2 task_struct:进程标识符 ​ pid_t pid; //进程的唯一标识 pid_t tgid; // 线程组中领头线程的...6.3 Linux中进程的执行 6.3.1 Linux中进程的执行 (1) exec系列函数 fork、vfork和clone三个函数主要是Linux用来创建新的进程(线程)而设计的,exec系列函数则是用来用指定的程序替换当前进程的所有内容...▪ 生命周期大致分为三种状态: - 运行态:进程正占用CPU和其它资源进行运算. - 就绪态:进程已做好一切准备, 等待获得CPU投入运行. - 睡眠态:进程因等待输入输出或其它系统资源, 而让出CPU...系统每个进程在其生命周期都有一个唯一的 - TTY 启动该进程的终端号 - TIME 进程累计占用CPU的时间 - COMMAND 产生该进程的命令 ▪ ps命令的常用任选项 -e (或-a) 显示系统中所有活动进程的信息

    19610

    x86 Linux 下实现 10us 误差的高精度延时 | 软件开发

    当时验证的结果也很满意,于是兴冲冲的告诉领导说方案可行,殊不知自己挖了一个巨大的坑…… 实际项目开始的时候,发现这个方案根本行不通,有两个原因: 信号通知只能通知到进程,而目前移植的方案无法做到被通知的进程中无其他线程...这样高频的信号发过来,其他线程基本上都会被干掉。(补充说明:这里特指的是内核驱动通知到应用层,在用户层中是有专门的函数可以通知不同线程的。...总结下来我大致进行了如下的尝试: 1、sleep方案的确定 尝试过 usleep、nanosleep、clock_nanosleep、cond_timedwait、select 等,最终确定用 clock_nanosleep...而用 clock_nanosleep 的好处就是一方面它可以选择时钟源,其次就是它支持绝对时间唤醒,这样我在每次 do_work 之前都设置一下 clock_nanosleep 下一次唤醒时的绝对时间,...那么 clock_nanosleep 实际执行的时间其实就会减去 do_work 的开销,相当于是闹钟的概念。

    67220
    领券