Articles of 进程

LD_PRELOADed库和subprocess

大家! 图像,我有一个程序(usemalloc)是这样的: #include <stdio.h> #include <stdlib.h> #define USER_BYTES_SIZE 100 int main(void){ char* userbytes = (char*)malloc(USER_BYTES_SIZE*sizeof(char)); if(!userbytes) return 1; for(int i = 0; i <= USER_BYTES_SIZE; i++){ // "i <= USER_BYTES_SIZE" leads to an off-by-one memory overrun. userbytes[i] = 0; } return 0; } 如你所见,有一个导致内存溢出的错误的错误。 我想在运行时检测这样的错误。 LD_PRELOAD库适合于我的工作。 我制作了一个名为libhijack.so的库来劫持真正的malloc的调用,并将其调用到我自己定制的malloc中,调用真正的malloc并在由真正的malloc分配的内存条的末尾添加红色区域。 libhijack.so的代码如下所示: void* (*real_malloc) (size_t size); void* malloc(size_t size){ […]

杀死所有subprocess的最好方法

我想杀死整个进程树。 使用任何通用脚本语言来做这件事的最好方法是什么? 我正在寻找一个简单的解决scheme。

如何判断一个Linux TTY是否正在控制一个进程组

所以我有一个tty(比方说/ dev / tty5),并且想知道它是否当前是一个进程组或会话的控制权,还是它当前是不拥有的。 POSIX有两个API函数,分别表示它们:tcgetpgrp()和tcgetsid(),这两个函数只有在调用者具有tty作为控制tty的情况下才起作用 – 这在这种情况下使得它们几乎没有用处(事实上, t根本看不到tcgetsid()的点)。 任何人都有一个build议,我可以从一个理智的方式检测,从C,terminal是否是一个过程的控制terminal? 我只关心Linux,所以如果Linux特定的API是必要的,那对我来说是很好的。

如果孩子在后台启动并且父母已经退出,如何知道父进程

我有一个孩subprocess在前台运行,他的父亲已经退出。 proc/$pid/stat文件不包含任何更多的父pid,如果父已经退出,它显示1而不是原始父pid linux$cat /proc/6267/stat 6267 (test3.sh) S 1 6265 …… # ^ # | # I expected to get the origin parent pid but I get 1 要快速重现此行为,我们可以使用以下脚本 test2.sh #!/bin/sh echo "test2=$$" ./test3.sh & test3.sh #!/bin/sh echo "test3=$$" sleep 1000 执行: linux$ ./test2.sh test2=6318 test3=6319 linux$ ps aux | grep test 6319 root 1484 S […]

为什么SIGHUP信号在成为孤立进程组时没有收到

在关于孤立进程组的 GNU libc手册中,提到: “process groups that continue running even after the session leader has terminated are marked as orphaned process groups. When a process group becomes an orphan, its processes are sent a SIGHUP signal. Ordinarily, this causes the processes to terminate. However, if a program ignores this signal or establishes a handler for it […]

Linux – 查找进程是否准备好或正在运行

我正在开发一个具有进程监视function的C ++应用程序,它监视基于这个模型的状态变化: http : //www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.png 然而,由于/ proc / pid / status将“就绪”和“执行”状态结合为“运行”状态,所以我不知道如何才能找出这些进程实际上处于哪种状态。提供关于如何发现这一点的任何build议?

Mac OS X中Windows命名互斥体的等价物?

目前我正在将一个软件从Windows移植到C ++的Mac OS X中。 在Windows中,全局命名互斥体中有一个被抛弃的状态,意味着互斥体的当前拥有者进程没有释放互斥体就消失了。 (这可能是由应用程序崩溃引起的) 由于被抛弃的状态的存在,试图locking被放弃的互斥锁不会造成死锁。 如果没有被遗弃的状态,它将永远等待一个不属于任何人的互斥体。 还有另外一种方法,如果在一定的时间内无法获得互斥量,则使用超时来假定互斥量被放弃,但与废弃的互斥量方式相比,这不是一个完美的解决scheme。 在最坏的情况下,意外的是两个进程可以访问由互斥锁locking的对象。 在Mac OS X / Linux中是否有任何互斥体支持遗弃状态? 我研究了boost库,boost库有一个有名的互斥体,但是它是基于一个共享文件,所以它没有被抛弃的状态。 请给我一些build议。

僵尸进程出现时,我产卵进程

我有一段代码,我生成的subprocess使其更高效。 但是,他们似乎创造了各种各样的僵尸进程,阻止套接字和降低网站。 spawn(:method => :thread) do if @login_user.suggested_group_info.new_record? xxx end end 1)为什么这会造成僵尸进程? 2)我怎么能写代码,以确保我成为一个僵尸之前杀死进程?

如何检查给定PID的进程是否正在运行?

我有一个用C#编写的程序,使用Mono在Linux上运行。 该程序将其PID写入一个文件。 现在我想检查一下这个PID的启动过程是否正在运行。 有没有使用单声道的方法? 如果没有,我怎样才能使用标准的Linuxfunction/工具来完成这个任务? 或者我必须检查/ proc / PID / cmdline?

Linux top命令如何确定Java进程的状态?

[更新:在top ,按Shift + H,它显示线程,而不是进程,然后显示Java线程为R,并使用100%的CPU时间,这是我希望发布此问题之前。 由于Java进程有多个线程,每个线程可能处于不同的状态,那么Linux top命令如何确定Java进程状态? 如果我运行下面的代码, public class Test{ public static void main(String[] args){ while (true){ int n = (int)(Math.random() * 1000); } } } 然后,运行top显示进程状态是S,它使用100%的CPU时间。 此外,运行strace显示,只显示: futex(0x7f6ba759c9d0, FUTEX_WAIT, 26060, NULL 但是,运行jstack显示主线程是RUNNABLE: "main" prio=10 tid=0x00007fd7ec007800 nid=0x669b runnable [0x00007fd7f5754000] java.lang.Thread.State: RUNNABLE at Test.main(Test.java:5) jstack还显示,WAITING状态下只有两个线程: "Finalizer" daemon prio=10 tid=0x00007fd7ec080000 nid=0x66a6 in Object.wait() [0x00007fd7f0252000] java.lang.Thread.State: WAITING (on […]