Articles of 进程

识别内核线程

我想知道如何区分我正在构build的进程扫描程序的用户线程的内核线程。 我很难find这两种types的好定义。 我发现内核线程没有自己的内存,所以/ proc / $ pid / status中没有Vm *值,并且/ proc / $ pid / exe中的统计信息不会返回任何内容。 所以,我想我可以识别内核线程,如果一个进程没有Vm *值和没有inode号码。 我想错了…我的脚本看到php-cgi进程有时被识别为内核进程。 如果发现那些错误识别出来的进程中的大部分是僵尸,那么一秒钟后就会死掉。 所以我执行了一个简单的检查,看看状态是否是“Z”。 如果是这样,请忽略它。 这为我节省了很多误报,但是我仍然收到有关php-cgi内核进程的消息。 任何人都可以告诉我如何以正确的方式区分内核线程和用户线程?

处于睡眠状态的CPU利用率较高

我有一个似乎陷入僵局的过程: # strace -p 5075 Process 5075 attached – interrupt to quit futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL 它坐在“futex”系统调用,似乎是无限期地等待锁。 当“top”运行时,这个过程显示消耗了大量的CPU: # top -b -n 1 top – 23:13:18 up 113 days, 4:19, 1 user, load average: 1.69, 1.74, 1.72 Tasks: 269 total, 1 running, 268 sleeping, 0 stopped, 0 zombie Cpu(s): 8.1%us, 0.1%sy, 0.0%ni, 91.8%id, 0.0%wa, 0.0%hi, […]

无法在64位Linux上运行32位应用程序

我有一个非常小的Ubuntu 8.04 64位安装。 当我尝试运行一些32位程序时,例如我的jhead程序,我得到消息No such file or directory 。 我想这可能是一个图书馆的问题,但是当我这样做的时候: ldd jhead 而不是它需要的库列表,我只是得到消息not a dynamic application 。 对于我使用的另一个旧的32位应用程序也是如此。 所以会出现一些运行32位应用程序的非常重要的组件。 但是我怎么才能确定这些是什么?

在使用C ++的Linux中显示进程

我从C ++开始,阅读一本关于它的好书,我想要构build一个程序,使用C ++向用户显示他正在做的Linux的所有进程。

缓冲区溢出在64位

我正在试图用缓冲区溢出做一些有趣的实验。 我正在阅读这个论坛的主题,并试图写我自己的小代码。 所以我做的是一个小的“C”程序,它需要字符参数并运行,直到分段错误。 所以我提供的参数,直到我得到一个消息,我用41代替了返回地址。我的缓冲区字符长度,我复制我的inputstring是[5]。 这是我在gdb中做的。 run $(perl -e 'print "A"x32 ; ') Program received signal SIGSEGV, Segmentation fault. 0x0000000000400516 in main (argc=Cannot access memory at address 0x414141414141412d 然后我发现需要16个'A'来覆盖。 run $(perl -e 'print "A"x16 . "C"x8 . "B"x32 ; ') 0x0000000000400516 in main (argc=Cannot access memory at address 0x434343434343432f ) 这告诉我们8“C”正在覆盖返回地址。 根据在线教程,如果我提供了一个有效的地址,而不是8“C”。 我可以跳到某个地方并执行代码。 所以我在初始的16“A”之后超载了内存。 下一步是执行 run […]

量化内存,CPU在Linux下使用C进程

如何知道,在Linux中有多lessRAM和CPU“吃”了某些过程? 以及如何找出所有运行的进程(包括守护进程和系统进程)? =) UPD:使用C语言

从信号处理程序打印堆栈跟踪

我需要从在Linux上运行的64位multithreadingC ++应用程序的信号处理程序打印堆栈跟踪。 虽然我find了几个代码示例,但是没有一个编译。 我的阻塞点是从ucontext_t结构中获取调用者(生成信号的点)的地址。 我可以find的所有信息都指向EIP寄存器,如ucontext.gregs [REG_EIP]或ucontext.eip。 看起来他们都是x86特定的。 英特尔和AMD处理器都需要符合64位的代码。 任何人都可以帮忙吗?

如何find一个进程在C中运行?

我想知道一个进程是否正在运行。 我不想使用任何系统(“”)命令。 有没有任何基于C的function,让你知道如果一个进程正在运行? 我想提供进程名称,并想知道它是否正在运行。 谢谢,

来自task_struct的完整进程名称

我想从struct task_struct获得完整的进程名称。 comm字段只能存储16个字符,而进程名称可以更长。 有没有办法得到完整的进程名称? 这可以通过从task_struct获取struct vm_area_struct来完成,并进一步获取映射到vm_area的文件,但这是不可靠的。

Linux中每个进程的编程资源监视

我想知道是否有一个有效的解决scheme来监视Linux中的进程资源消耗(CPU,内存,networking带宽)。 我想用C ++编写一个守护进程来监视某些给定的PID。 据我所知,经典的解决scheme是周期性地从/ proc读取信息,但这似乎并不是最有效的方式(涉及很多系统调用)。 例如,为了监视50个进程每秒的内存使用情况,我必须每秒从/ proc打开,读取和closures50个文件(这意味着150个系统调用)。 更不用说在读这些文件时涉及的parsing。 另一个问题是networking带宽消耗:对于我想要监视的每个进程,这是不容易计算的。 NetHogs采用的解决scheme涉及到相当高的开销,我认为它使用libpcap捕获和分析每个数据包,然后为每个数据包确定本地端口并在/ proc中search以find相应的进程。 你知道是否有更有效的替代方法提出这些方法或任何图书馆处理这个问题?