Articles of 进程

SIGCHLD未交付到进程树中

我试图创build一个进程来pipe理一些其他进程的方式,如果一个孩子死亡,然后父母重新启动进程和依赖于它的进程。 问题是,我注意到,如果我在这个结构的中间重新启动一个进程时创build一个进程的树结构,我无法在新的subprocess终止时发出信号。 我写一个例子, 假设我们有3个过程,祖父母,父母和孩子。 祖父母的叉子,并开始父,叉和开始孩子(我把这个职位的末尾的代码)。 现在,如果我杀了孩子一切正常,孩子正确地重新启动。 如果我杀了父…祖父母重新启动父,重新启动子,但如果我杀了孩子的过程中保持僵尸状态和SIGCHLD不传递给父进程。 换一种说法: 开始祖父母进程,并等待所有3个进程已经启动 杀死父进程,并等待重启subprocess的祖父母重启父进程 现在杀死孩子的过程,这个过程仍然处于僵尸状态。 我无法理解这种行为…我已经阅读了大量有关信号和等待的示例和文档,试图重置默认处理程序,在父母和祖父母之前,但似乎没有工作…这是代码示例… grandparent.cpp #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <signal.h> #include <wait.h> using namespace std; void startProcess(string processFile); void childDieHandler(int sig, siginfo_t *child_info, void *context); FILE *logFile; int currentChildPid; int main(int argc, char** argv) { currentChildPid = 0; logFile = stdout; daemon(1,1); […]

Linux:常规和特权进程之间的mmap MAP_SHARED好吗?

我想要一个在限制用户下运行的进程与一个守护进程共享一个futex,这个守护进程基本上是root用户,可以放弃一些权限。 通常的shm_open和mmap等是否可以与以不同用户运行的进程一起工作,并具有不同的权限? 有什么具体的安全问题,如果有的话(我怎么减轻他们,权限也许)? 这两个过程中的哪一个创buildfd有什么区别?

64位Linux上的高分辨率定时器支持

我试图在2.6.39.1 64位Linux上启用高分辨率定时器支持。 为此,我首先在.config中设置CONFIG_HIGH_RES_TIMERS=y 。 另外, grep HZ .config的输出是: # CONFIG_RCU_FAST_NO_HZ is not set CONFIG_NO_HZ=y # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set # CONFIG_HZ_300 is not set CONFIG_HZ_1000=y CONFIG_HZ=1000 CONFIG_MACHZ_WDT=m 但是,重新编译内核后,下面的命令的输出不是预期的1 nsec 。 cat /proc/timer_list |grep resolution print: .resolution: 999848 nsecs 另外, cat /proc/timer_list |grep handler输出: event_handler: tick_handle_periodic ,而不是event_handler: hrtimer_interrupt 当我使用hrtimer进行实验时,我显然没有看到结果的纳秒精度。 我也尝试运行这里提到的C程序,这应该有助于确定Linux内核定时器中断频率。 运行C程序的结果如下: […]

我怎样才能听一个正在运行的Linux进程?

我在服务器上运行一个rake任务作为一个单独的进程,并在STDOUT上打印,以跟踪脚本的进度。 而在SSH连接,我的互联网连接重置。 当我重新build立到服务器的连接时,我发现这个过程还在运行。 我想听听它的STDOUT输出。 我有进程ID。 我怎样才能做到这一点?

Linux中的进程或线程级电源监视

我正在寻找一些能够为Linux操作系统提供进程或线程级功耗的工具。 我正在寻找类似于顶级,vmstat,mpstat,活动监视器(MAC)等与电力使用相似的东西,即使近似)。 我看到了Andorid PowerTutor的一个工具,可以为特定的Andorid手机做好工作。 是否有类似的工具,可以提供统计的笔记本电脑/台式机等的Linux操作系统? 任何build议表示赞赏。

Linux内核:发生进程coredump之前的事件/path序列

当出现分段错误并且生成一个进程coredump时,在内核和用户空间(wrt Linux)中发生的事件的顺序是什么? Linux不支持sigsegv处理程序。 信号处理程序如何被调用,并返回一个coredump生成? 我正在寻找事件序列和任何指向Linux内核函数名称的指针(关于任何最新的内核)。 我将从函数名称中找出其余部分,我明白可以从代码中找出其余部分。

在进程之间传递消息

我需要编写一个简单的函数,在linux中执行以下操作: 创build两个进程。 让Process1中的thread1执行一些小操作,并在操作完成后通过thread2发送消息给Process2。 * Process2应确认收到的消息。 我不知道从哪里开始 我已经写了两个简单的函数,从0到1000在一个循环(循环运行在一个线程调用的函数),我已经编译它们来获取二进制文件。 我正在执行一个接一个(在后台运行)从一个shell脚本 一旦process1在循环中达到1000,我希望第一个进程发送一个“Complete”消息给另一个。 我不确定我的方法在stream程方面是否正确,我完全不知道如何沟通这两者。 任何帮助将不胜感激。 迷失在太空

将一个长整型投射到void *

这是一个long的void *的正确方法吗? 在Qt程序中使用-O2时会出现段错误。 使用-O1时不会出现段-O1 。 当使用reinterpret_cast<void *>(tp.tv_nsec)我也使用-O2 。 为什么会出现段错误? timespec tp; // struct that holds nanoseconds since Epoch clock_gettime(CLOCK_REALTIME, &tp); // tv_nsec is a long int void *test = mmap((void *)(tp.tv_nsec), 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); printf("%p\n", test); printf("%li\n", (long)test); 编辑: AFAIK,目标似乎已经表示错误。 目标是获得一个随机数字,以便分配一个随机存储器地址。 这样我每次在我的testing程序中使用mmap()多次提供mmap()一个随机数就会得到一个随机存储地址。 如果不是,mmap()似乎是按顺序分配内存。

是否有系统调用来获取正在运行的进程的uid / gid?

对我自己的问题的长篇回答,用Googlesearch并没有发现任何有用的东西,是通过“ps”的来源进行筛选。 但是在这之前,有没有人愿意提供懒人的解决scheme呢? 🙂 我发现这个问题: 使用procf / <pid> / status了解进程状态但是,3.2内核似乎没有解决scheme。 这个pstatus_ttypes在更新的内核中可用吗? 如果是这样,这是否意味着更新的内核为/ proc //状态提供二进制接口?

可能最后PIDvariables$! 是错的?

如果一个脚本启动一个进程,并立即收集与$! PID $! ,如果在脚本启​​动过程之间和脚本收集PID为$!的时刻系统的某个其他位置启动了一个进程,它是否可能得到错误的PID $! ?