PROC系列之---/proc/pid/stat

2023-05-16

 /proc/ /stat
包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

[root@localhost ~]# cat /proc/6873/stat
6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0 [root@localhost ~]#


每个参数意思为:
参数 解释
pid=6873 进程(包括轻量级进程,即线程)号
comm=a.out 应用程序或命令的名字
task_state=R 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
ppid=6723 父进程ID
pgid=6873 线程组号
sid=6723 c该任务所在的会话组ID
tty_nr=34819(pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号
tty_pgrp=6873 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。
task->flags=8388608 进程标志位,查看该任务的特性
min_flt=77 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数
cmin_flt=0 累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目
maj_flt=0 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数
cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目
utime=1587 该任务在用户态运行的时间,单位为jiffies
stime=1 该任务在核心态运行的时间,单位为jiffies
cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies
cstime=0 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies
priority=25 任务的动态优先级
nice=0 任务的静态优先级
num_threads=3 该任务所在的线程组里线程的个数
it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.
start_time=5882654 该任务启动的时间,单位为jiffies
vsize=1409024(page) 该任务的虚拟地址空间大小
rss=56(page) 该任务当前驻留物理地址空间的大小
Number of pages the process has in real memory,minu 3 for administrative purpose.
这些页可能用于代码,数据和栈。
rlim=4294967295(bytes) 该任务能驻留物理地址空间的最大值
start_code=134512640 该任务在虚拟地址空间的代码段的起始地址
end_code=134513720 该任务在虚拟地址空间的代码段的结束地址
start_stack=3215579040 该任务在虚拟地址空间的栈的结束地址
kstkesp=0 esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.
kstkeip=2097798 指向将要执行的指令的指针, EIP(32 位指令指针)的当前值.
pendingsig=0 待处理信号的位图,记录发送给进程的普通信号
block_sig=0 阻塞信号的位图
sigign=0 忽略的信号的位图
sigcatch=082985 被俘获的信号的位图
wchan=0 如果该进程是睡眠状态,该值给出调度的调用点
nswap 被swapped的页数,当前没用
cnswap 所有子进程被swapped的页数的和,当前没用
exit_signal=17 该进程结束时,向父进程所发送的信号
task_cpu(task)=0 运行在哪个CPU上
task_rt_priority=0 实时进程的相对优先级别
task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程 
 
 
zhuan自: http://blog.csdn.net/zjl_1026_2001/article/details/2294067
 
 
 

/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

/proc目录中有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,它们是读取进程信息的接口。此外,Linux 2.6.0-test6以上的版本中/proc/pid目录中有一个task目录,/proc/pid/task目录中也有一些以该进程所拥有的线程的线程号命名的目录/proc/pid/task/tid,它们是读取线程信息的接口。

/proc/cpuinfo文件

         该文件中存放了有关 cpu的相关信息(型号,缓存大小等)。

[zhengangen@buick ~]$ cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 15

model           : 4

model name      : Intel(R) Xeon(TM) CPU 3.00GHz

stepping        : 10

cpu MHz         : 3001.177

cache size      : 2048 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 1

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 5

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm pni monitor ds_cpl cid xtpr

bogomips        : 6004.52

 

说明:以下只解释对我们计算Cpu使用率有用的相关参数。

         参数                            解释

processor (0)                       cpu的一个物理标识

 

结论1:可以通过该文件根据processor出现的次数统计cpu的逻辑个数(包括多核、超线程)

/proc/stat文件

         该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致,以下通过实例来说明数据该文件中各字段的含义。

实例数据:2.6.24-24版本上的

 

fjzag@fjzag-desktop:~$ cat /proc/stat

cpu  38082 627 27594 893908 12256 581 895 0 0

cpu0 22880 472 16855 430287 10617 576 661 0 0

cpu1 15202 154 10739 463620 1639 4 234 0 0

intr 120053 222 2686 0 1 1 0 5 0 3 0 0 0 47302 0 0 34194 29775 0 5019 845 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ctxt 1434984

btime 1252028243

processes 8113

procs_running 1

procs_blocked 0

第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:

参数          解析(单位:jiffies)

(jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)

user (38082)    从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。

nice (627)      从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

system (27594从系统启动开始累计到当前时刻,处于核心态的运行时间

idle (893908)   从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait (12256) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)

irq (581)           从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)

softirq (895    从系统启动开始累计到当前时刻,软中断时间(since 2.6.0-test4)stealstolen(0)                   which is the time spent in other operating systems when running in a virtualized environment(since 2.6.11)

guest(0)                               which is the time spent running a virtual  CPU  for  guest operating systems under the control of the Linux kernel(since 2.6.24)

 

结论2:总的cpu时间totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen  +  guest

/proc/<pid>/stat文件                                          

该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计

到当前时刻。以下通过实例数据来说明该文件中各字段的含义。

 

[zhengangen@buick ~]# cat /proc/6873/stat

6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0

 

说明:以下只解释对我们计算Cpu使用率有用相关参数

参数                                                                解释

pid=6873                            进程号

utime=1587                       该任务在用户态运行的时间,单位为jiffies

stime=41958                      该任务在核心态运行的时间,单位为jiffies

cutime=0                            所有已死线程在用户态运行的时间,单位为jiffies

cstime=0                            所有已死在核心态运行的时间,单位为jiffies

 

结论3进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。

/proc/<pid>/task/<tid>/stat文件

该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/<pid>/stat文件。

         注意,该文件中的tid字段表示的不再是进程号,而是linux中的轻量级进程(lwp),即我们通常所说的线程。

 

结论4:线程Cpu时间threadCpuTime = utime + stime

系统中有关进程cpu使用率的常用命令

ps 命令

通过ps命令可以查看系统中相关进程的Cpu使用率的信息。以下在linux man文档中对ps命令输出中有关cpu使用率的解释:

 

CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process. This is not ideal, and it does not conform to the standards that ps otherwise conforms to. CPU usage is unlikely to add up to exactly 100%.

 

%cpu   cpu utilization of the process in "##.#" format. It is the CPU time used                           divided by the time the process has been running (cputime/realtime ratio),                           expressed as a percentage. It will not add up to 100% unless you are lucky.

 

结论5ps命令算出来的cpu使用率相对于进程启动时的平均值,随着进程运行时间的增大,该值会趋向于平缓。

top命令

通过top命令可以查看系统中相关进程的实时信息(cpu使用率等)。以下是man文档中对top命令输出中有关进程cpu使用率的解释。

 

#C  --  Last used CPU (SMP)                   A number representing the last used processor. In a true  SMP  environment  this  will  likely change  frequently  since  the  kernel intentionally uses weak affinity.  Also, the very act of running top may break this weak affinity and cause more processes to  change  CPUs  more  often (because of the extra demand for cpu time).

 

%CPU  --  CPU usage                   The  task’s share of the elapsed CPU time since the last screen update, expressed as a percent-age of total CPU time.  In a true SMP environment, if  Irix mode is Off, top will operate in Solaris mode where a task’s cpu usage will be divided by the total number of CPUs.

 

结论6某一个线程在其运行期间其所使用的cpu可能会发生变化。

结论7在多核的情况下top命令输出的cpu使用率实质是按cpu个数*100%计算的。<!--[if !supportAnnotations]-->

单核情况下Cpu使用率的计算

基本思想

通过读取/proc/stat 、/proc/<pid>/stat、/proc/<pid>/task/<tid>/stat以及/proc/cpuinfo这几个文件获取总的Cpu时间、进程的Cpu时间、线程的Cpu时间以及Cpu的个数的信息,然后通过一定的算法进行计算(采样两个足够短的时间间隔的Cpu快照与进程快照来计算进程的Cpu使用率)。

 

总的Cpu使用率计算

计算方法:

<!--[if !supportLists]-->1、  <!--[endif]-->采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

<!--[if !supportLists]-->2、  <!--[endif]-->计算总的Cpu时间片totalCpuTime

<!--[if !supportLists]-->a)         <!--[endif]-->把第一次的所有cpu使用情况求和,得到s1;

<!--[if !supportLists]-->b)         <!--[endif]-->把第二次的所有cpu使用情况求和,得到s2;

<!--[if !supportLists]-->c)         <!--[endif]-->s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

3、计算空闲时间idle

idle对应第四列的数据,用第二次的第四列 - 第一次的第四列即可

idle=第二次的第四列 - 第一次的第四列

6、计算cpu使用率

pcpu =100* (total-idle)/total

某一进程Cpu使用率的计算

计算方法:  

<!--[if !supportLists]-->1.               <!--[endif]-->采样两个足够短的时间间隔的cpu快照与进程快照,

<!--[if !supportLists]-->a)         <!--[endif]-->每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

<!--[if !supportLists]-->b)         <!--[endif]-->每一个进程快照均为 (utimestimecutimecstime)4元组;

<!--[if !supportLists]-->2.               <!--[endif]-->分别根据结论2、结论3计算出两个时刻的总的cpu时间与进程的cpu时间,分别记作:totalCpuTime1totalCpuTime2processCpuTime1processCpuTime2

<!--[if !supportLists]-->3.               <!--[endif]-->计算该进程的cpu使用率pcpu = 100*( processCpuTime2 – processCpuTime1) / (totalCpuTime2 – totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);

实验数据

实验一: 监控一空循环的进程的cpu使用率。

说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。

按以上方法计算得到的cpu使用率

通过top命令得到的

 

99.50083

98.333336

98.0

98.83138

99.0

99.0

99.83361

98.83527

98.4975

 

PID    USER      PR   NI   VIRT   RES   SHR   S  %CPU %MEM  TIME+  COMMAND 

7639 fjzag     20   0  206m  10m 7136 S   99  2.2   1:00.74 java              

 7639 fjzag     20   0  206m  10m 7136 S   99  2.2   1:03.71 java              

 7639 fjzag     20   0  206m  10m 7136 S   99  2.2   1:06.67 java              

 7639 fjzag     20   0  206m  10m 7136 S   99  2.2   1:09.63 java              

 7639 fjzag     20   0  206m  10m 7136 S   98  2.2   1:12.59 java              

 7639 fjzag     20   0  206m  10m 7136 S   99  2.2   1:15.55 java              

 7639 fjzag     20   0  206m  10m 7136 S  100  2.2   1:18.55 java              

 7639 fjzag     20   0  206m  10m 7136 S  100  2.2   1:21.54 java              

 7639 fjzag     20   0  206m  10m 7136 S   99  2.2   1:24.52 java              

 7639 fjzag     20   0  206m  10m 7136 S   98  2.2   1:27.46 java

 

实验二: 监控jconsole进程的cpu使用率。

说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。

按以上方法计算得到的cpu使用率

通过top命令得到的

 

8.681135

12.0

10.350584

7.6539097

7.6539097

5.0

13.021703

11.0

8.666667

PID   USER      PR   NI  VIRT   RES   SHR  S  %CPU %MEM  TIME+  COMMAND 

7753 fjzag     20   0  252m  72m  22m S   10 14.4   0:18.70 jconsole          

 7753 fjzag     20   0  252m  72m  22m S   12 14.4   0:19.07 jconsole          

 7753 fjzag     20   0  252m  72m  22m S   11 14.4   0:19.39 jconsole          

 7753 fjzag     20   0  252m  72m  22m S    7 14.4   0:19.61 jconsole          

 7753 fjzag     20   0  252m  72m  22m S    7 14.4   0:19.83 jconsole          

 7753 fjzag     20   0  252m  72m  22m S    5 14.4   0:19.97 jconsole          

 7753 fjzag     20   0  252m  72m  22m S   14 14.4   0:20.38 jconsole          

 7753 fjzag     20   0  252m  72m  22m S   10 14.4   0:20.68 jconsole          

 7753 fjzag     20   0  252m  72m  22m S    9 14.5   0:20.96 jconsole

某一线程Cpu使用率的计算

计算方法:  

<!--[if !supportLists]-->1.               <!--[endif]-->采样两个足够短的时间隔的cpu快照与线程快照,

<!--[if !supportLists]-->a)         <!--[endif]-->每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstealon、guest)的9元组;

<!--[if !supportLists]-->b)         <!--[endif]-->每一个线程快照均为 (utimestime)2元组;

<!--[if !supportLists]-->2.               <!--[endif]-->分别根据结论2、结论4计算出两个时刻的总的cpu时间与线程的cpu时间,分别记作:totalCpuTime1totalCpuTime2threadCpuTime1threadCpuTime2

<!--[if !supportLists]-->3.               <!--[endif]-->计算该线程的cpu使用率pcpu = 100*( threadCpuTime2 – threadCpuTime1) / (totalCpuTime2 – totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);

实验数据

实验一: 监控一空循环的线程的cpu使用率。

说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。

按以上方法计算得到的cpu使用率

通过top命令得到的

 

98.83138

97.00997

96.98997

97.49583

98.169716

96.8386

97.333336

93.82304

98.66667

PID    USER      PR   NI   VIRT   RES   SHR   S  %CPU %MEM  TIME+  COMMAND 

7649 fjzag     20   0  206m  10m 7136 R   97  2.2   7:22.94 java              

 7649 fjzag     20   0  206m  10m 7136 R   97  2.2   7:25.86 java              

 7649 fjzag     20   0  206m  10m 7136 R   97  2.2   7:28.76 java              

 7649 fjzag     20   0  206m  10m 7136 R   99  2.2   7:31.72 java              

 7649 fjzag     20   0  206m  10m 7136 R   98  2.2   7:34.65 java              

 7649 fjzag     20   0  206m  10m 7136 R   96  2.2   7:37.53 java              

 7649 fjzag     20   0  206m  10m 7136 R   98  2.2   7:40.47 java              

 7649 fjzag     20   0  206m  10m 7136 R   96  2.2   7:43.34 java              

 7649 fjzag     20   0  206m  10m 7136 R   97  2.2   7:46.25 java

 

实验二: 监控jconsole程序某一线程的cpu使用率。

说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。

按以上方法计算得到的cpu使用率

通过top命令得到的

 

1.3400335

6.644518

1.3333334

0.6677796

0.6666667

1.3333334

1.3333334

 PID    USER      PR   NI   VIRT   RES  SHR  S  %CPU %MEM  TIME+  COMMAND 

7755 fjzag     20   0  251m  72m  22m S    1 14.4   0:11.92 jconsole          

 7755 fjzag     20   0  251m  72m  22m S    7 14.4   0:12.12 jconsole          

 7755 fjzag     20   0  251m  72m  22m S    2 14.4   0:12.18 jconsole          

 7755 fjzag     20   0  251m  72m  22m S    0 14.4   0:12.18 jconsole          

 7755 fjzag     20   0  251m  72m  22m S    1 14.4   0:12.20 jconsole          

 7755 fjzag     20   0  251m  72m  22m S    1 14.4   0:12.24 jconsole          

 7755 fjzag     20   0  251m  72m  22m S    1 14.4   0:12.28 jconsole

多核情况下cpu使用率的计算                                                    

以下通过实验数据来说明多核情况下某一进程cpu使用率是按cpu个数*100%计算的.

实验一

描述:

双核的情况下作的一组实验,第一组数据是通过ps  -eLo pid,lwp,pcpu | grep 9140命令查看进程号为9140的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为9140进程的cpu使用率。

数据一:

pid   lwp  %cpu

9140  9140  0.0
 9140  9141  0.0
 9140  9142  0.0
 9140  9143  0.0
 9140  9144  0.0
 9140  9149  0.0
 9140  9150  0.0
 9140  9151  0.0
 9140  9152  0.1
 
9140  9153 96.6                         该线程是一个空循环
 9140  9154 95.9
                         该线程是一个空循环

以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。

数据二:

pid   %cpu

9140  193

实验二

描述:

单核的情况下作的一组实验,第一组数据是通过ps  -eLo pid,lwp,pcpu | grep 6137命令查看进程号为6137的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为6137进程的cpu使用率。

数据一:

 pid    lwp   %cpu

 6137  6137  0.0

 6137  6138  0.1

 6137  6143  0.0

 6137  6144  0.0

 6137  6145  0.0

 6137  6146  0.0

 6137  6147  0.0

 6137  6148  0.0

 6137  6149  0.0

 6137  6150 46.9                                                 空循环线程

 6137  6151 46.9                                                 空循环线程

以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。

数据二

pid %cpu

6137 92.9

主要问题:

<!--[if !supportLists]-->1.       <!--[endif]-->不同内核版本/proc/stat文件格式不大一致。/proc/stat文件中第一行为总的cpu使用情况。

各个版本都有的4个字段: user、nice、system、idle

2.5.41版本新增字段:iowait

2.6.0-test4新增字段:irq、softirq

2.6.11新增字段:stealstolen :                    which is the time spent in other operating

systems when running in a virtualized environment

2.6.24新增字段:guest:                                    which is the time spent running a virtual  CPU  for  guest operating systems under the control of the Linux kernel

2./proc/pid/task目录是Linux 2.6.0-test6之后才有的功能。

 

3.关于出现cpu使用率为负的情况,目前想到的解决方案是如果出现负值,连续采样计算cpu使用率直到为非负。

 

4. 有些线程生命周期较短,可能在我们采样期间就已经死掉了.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PROC系列之---/proc/pid/stat 的相关文章

  • Linux内核模块相互调用

    编写一个内核模块A xff0c 通过导出模块符号的方式来实现接口函数 编写另一个内核模块B xff0c 调用内核模块A暴露出来的接口函数 1 源文件 内核模块A xff08 test A c xff09 span class token m
  • RTOS论文笔记(二)

    李在林 韩宏克 嵌入式Linux实时性分析及改造 2010 Linux 的实时性测试 中断延迟测试 在Linux中 xff0c 内核或驱动程序显式地关 开中断 xff0c 一般是通过调用 cli sti 来进行操作的 在调用 cli 时 x
  • LXC容器相关论文笔记

    段赫 基于LXC容器资源优化的研究与实现 2016 一 绪论 容器虚拟化技术 传统虚拟化技术 xff0c 实现一个虚拟机就意味着需要消耗了硬件资源来在底层系统上虚拟一个新的操作系统 xff0c 所以除了传统模拟硬件的虚拟化技术 xff0c
  • fork和clone系统调用小实验

    实验一 xff1a 使用fork 函数创建一个子进程 xff0c 然后在父进程和子进程中分别使用printf语句来判断谁是父进程和子进程 fork 函数被调用后会立即创建一个子进程 xff0c 子进程和父进程同时独立运行互不干扰 返回值 x
  • 【RTOS论文笔记】A Comparative Analysis of RTOS and Linux Scalability on an Embedded Many-core Processor

    背景 以往对多核实时操作系统的研究主要集中在多核处理器上任务集的可调度性和响应时间分析 同时 xff0c 许多研究人员声称 xff0c 在不久的将来 xff0c 高端嵌入式系统还将包括高性能并行应用程序 xff0c 以支持复杂的任务 xff
  • 树莓派4B内核打RT-preempt实时补丁的实现

    硬件环境 xff1a 树莓派4B 操作系统 xff1a 树莓派版Ubuntu server 20 04 LTS xff08 64bit xff09 1 依赖环境的安装 运行如下命令 xff1a span class token functi
  • RT-Preempt笔记

    基于Zynq平台的Linux实时性研究及在数据采集中的应用 马啸 嵌入式实时系统研究现状 实时操作系统专门用于在时间约束条件下运行时间关键的应用程序 用于操作处理实时任务所需的最坏情况执行时间 xff08 Worst Case Execut
  • Mac上vmware fusion装的ubuntu不能与主机复制粘贴的问题

    解决方法一 xff1a 安装vmware tools 依次点击 xff1a 虚拟机 gt 安装vmware tools 会在ubuntu桌面上出现vmware tools xff0c 双击打开 解压tar gz包 xff0c 执行解压命令t
  • ceph的一些优化

    最近一直在忙着搞Ceph存储的优化和测试 xff0c 看了各种资料 xff0c 但是好像没有一篇文章把其中的方法论交代清楚 xff0c 所以呢想在这里进行一下总结 xff0c 很多内容并不是我原创 xff0c 只是做一个总结 如果其中有任何
  • Ubuntu 20.04使用qemu搭建ARM64 Linux系统

    1 安装所需依赖 span class token function sudo span span class token function apt get span span class token function install sp
  • GCC 编译选项总结

    c 只激活预处理 编译 和汇编 也就是他只把程序做成obj文件 例子用法 gcc span class token operator span c hello span class token punctuation span c 他将生成
  • 常见排序算法 Python实现

    冒泡排序 span class token keyword def span span class token function bubbleSort span span class token punctuation span lst s
  • GCC 编译优化等级

    参考资料 xff1a Using the GNU Compiler Collection 打开优化标志会使编译器尝试以牺牲编译时间和调试程序的能力为代价来提高性能和 或代码大小 根据目标和 GCC 的配置方式 xff0c 在每个 O 级别启
  • 树莓派4B开机自动发微信报告ip地址

    方法的实现基本基于博主虚宇宸轩的 实现 树莓派开机自动向微信发消息报告ip地址 xff08 无第三方代理 xff09 xff0c 具体原理和操作过程 xff0c 请参考该博主的文章 xff0c 写得很详细 xff0c 原理解释的也很清楚 本
  • 解决arm-none-eabi-gcc交叉编译helloworld程序segmentation fault 错误

    目标 xff1a 在x86 64主机上 windows 10或ubuntu 20 04 上交叉编译arm架构的helloworld程序 xff0c 然后通过scp将编译完的可执行文件传给树莓派4B xff0c 在树莓派上执行该程序 xff0
  • 中断方式及DMA工作详解

    一 轮询方式 对I O设备的程序轮询的方式 xff0c 是早期的计算机系统对I O设备的一种管理方式 它定时对各种设备轮流询问一遍有无处理要求 轮流询问之后 xff0c 有要求的 xff0c 则加以处理 在处理I O设备的要求之后 xff0
  • 构成帧的方法

    组帧 组帧的原因是为了在出错的时候只需要重发出错的帧 xff0c 而不需要重发全部数据 xff0c 从而提高效率 为了能让接收方正确地接收并检查所传输的帧 xff0c 发送方必须依据一定的规则把网络层传下来的分组封装成帧 这个动作称为组帧
  • AUTOWARE下底盘CAN通讯实现

    无人驾驶系列 autoware与底盘CAN通讯实现 本文介绍在使用autoware时 xff0c 如何将autoware发送的消息传输给底盘 xff0c 实现对线控底盘的控制 准备工作 xff1a 1 系统具备ROS和autoware 2
  • Boost库安装与使用

    Boost 库很不错 xff0c 所以我今天就安了它一下下 Boost 库不是 C 43 43 标准库的一部分 xff08 据说在下一版本的 C 43 43 标准会采纳它 xff09 xff0c 但它有一些标准库所没有的很有用的一些功能 x
  • ROS Ubuntu20.04多版本opencv运行及bug解决

    ubuntu系统装有多个版本opencv使用方法及可能出现的问题 xff1a 单opencv版本时使用命令 xff1a find package OpenCV 3 2 REQUIRED 其默认是在user local 目录下安装的openc

随机推荐

  • UDP编程

    一切以包裹为中心 xff0c 字节数组为核心 一 UDP的基本步骤 xff1a 1 xff09 发送端 package com sxt udp import java net DatagramPacket import java net D
  • LWIP之lwip_select函数使用

    本测试基于lwip2 1 2 参考了CSDN博主 64 则强 的文章 原文链接 xff1a https blog csdn net baidu 39191253 article details 127630186 部分地方做了修改 xff0
  • 直流无刷电机的调试与代码开源(配套资源)

    本周对手头的一款大疆M3508直流无刷电机调试的相关内容进行整理及个人的代码进行分享 一 M3508直流无刷电机 直流无刷电机的工作原理此处不做阐述 xff0c 相关资料也易查询 1 1电机结构与连接样式图 1 2电机参数 具体不多加阐述
  • Linux网络编程——UDP编程

    文章目录 前言一 udp编程相关函数1 socket函数2 bind函数3 sendto函数4 recvfrom函数5 close函数 二 实际案例总结 前言 1 UDP通信协议 xff0c 服务器端和客户端无需建立连接 xff0c 只需要
  • c++ vector用法 入门必看 超详细

    1 vector的作用 vector是最常用的容器之一 xff0c 功能十分强大 xff0c 可以储存 管理各种类型的数据 在很多情况下可以用来代替功能比较局限的普通数组 xff0c 因为我们知道 xff0c 普通数组只能实现一对一的映射而
  • 比特(bit)和字节(byte)

    比特 xff08 bit xff09 和字节 xff08 byte xff09 比特 一个0或者一个1存储为一个bit xff0c 是计算机中最小的一个存储单位 字节 计算机中最基本的存储单元是字节 xff0c 一个字节是由8个比特构成的
  • 图形化界面如何给画笔加粗

    public void actionPerformed ActionEvent e String bstr 61 e getActionCommand 获得该组件上的文本内容 xff1b str 61 e getActionCommand
  • 在Ubuntu18.04上面安装VMware-tools实现屏幕适配(保姆级别操作)

    默认在虚拟机上面安装了Ubuntu xff0c 如果没有安装点击下面链接 xff0c 对照教程安装即可 注意每个人需要的Ubuntu的版本不一样安装自己的需要下载就行不要完全照着教程来 http t csdn cn Q1r0d 看自己需要安
  • ipv6的一些特殊地址

    2008年7月3日第二次修正 xff01 昨天是修正了地址部分 xff0c 本想发上来的 xff0c 没来得及 今天修正了NDP协议 xff0c 接下来会是路由和转换部分 总结一下各协议的精华 xff1a OSPF在于LSA xff0c B
  • VMware上面实现Ubuntu和Windows文件的复制粘贴功能(以及虚拟机当中插入U盘能够显示)

    一 xff1a 安装VMware tools工具 点击以下链接有详细的教程和操作 xff08 如何在Ubuntu18 04上面安装VMware tools xff09 http t csdn cn is6rZ 二 xff1a 实现Windo
  • IDEA当中System.out.println输出中文乱码,以及控制台中文文字乱码的解决方案

    操作步骤如下 1System out println在控制台输出中文乱码的解决 xff08 原因分析 xff09 因为System out读取系统使用GBK编码输出 xff0c 而IEDA控制台使用的是UTF 8解码 xff08 解决方法
  • rosdep update延时问题最简单方法解决和ros一键下载

    ros一键下载 点击链接即可参考博客教程安装 http t csdn cn HqtoN rosdep update延时问题解决 xff08 time out xff09 方法一 xff1a 第一步 xff1a sudo apt get in
  • Typora基础操作

    Typora操作教程 文章目录 Typora操作教程一 xff1a Markdown语法1 1标题 1 2字体1 3线1 4列表1 5区块1 6代码1 7链接1 8图片二 xff1a Typora与数学公式2 1各种符号的实现2 2各种特殊
  • Tomcat下载和配置详细

    Tomcat下载和配置 1 下载Tomcat安装包 Tomcat下载地址 xff1a https tomcat apache org 点击圈画部分下载安装包 在这里插入图片描述 https img blog csdnimg cn 5b033
  • 【嵌入式知识08】STM32的USART串口通信,给上位机连续发送Hello Windows!

    本文主要介绍串口协议和RS 232 485标准 xff0c 以及RS232 485电平与TTL电平的区别 xff0c 了解 34 USB TTL转232 34 模块的工作原理 xff1b 并完成一个STM32的USART串口通讯程序 本文目
  • dm-vio-ros的安装(详细)

    前言 dm vio安装 参考博客 SLAM DM VIO ros版 安装和论文解读 在安装过程中 xff0c 有些地方提示的不是很清楚 xff0c 故写一篇记录避免再次犯错 在dm vio的一个子目录下创建ros工作空间 xff0c 如图所
  • C语言几种常见头文件,再也不怕用了函数不知道他“妈”的问题了!!!

    不完全统计 xff0c C语言标准库中的头文件有15个之多 xff0c 所以我主要介绍常用的这四个头文件stdio h xff0c string h xff0c math h xff0c stdlib h xff0c 以后用到其他的再做补充
  • K210与STM32之间的通信

    K210与STM32之间使用串口进行通信 K210 K210使用的开发环境是MaixPy IDE 具体解释见代码注释 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a span class token keyword impo
  • Linux多线程编程问题:对‘pthread_create’未定义的引用

    在Linux下进行多线程程序测试时出现如下问题 xff1a 对 pthread create 未定义的引用 collect2 error ld returned 1 exit status 问题原因 xff1a linux下调用子线程时会用
  • PROC系列之---/proc/pid/stat

    proc stat 包含了所有CPU活跃的信息 xff0c 该文件中的所有值都是从系统启动开始累计到当前时刻 root 64 localhost cat proc 6873 stat 6873 a out R 6723 6873 6723