Articles of 进程

在linux中即时检测新进程

我正在尝试在用户空间中创build一个设置进程相似性的应用程序。 我希望程序在内核产生新的pid / tid时立即触发。 我试图从内核的do_fork()方法写入/ proc下的文件节点,但我觉得它可能有太多的开销。 有没有人知道任何替代scheme来检测一个新的stream程创build后立即产生? 如果监视do_fork()是要走的路,那么通过系统调用callback用户空间程序会比使用fs节点进行通信更快?

如何在shell中join多个进程?

所以我做了一个小的c ++二进制文件连接来在服务器上执行一个命令来testing它,所以我开始研究下面的shell脚本: #!/bin/bash for (( i = 0 ; i <= 15; i++ )) do ./mycppbinary test 1 & done 现在,我也碰巧想要花时间来执行所有的stream程。 我想我将不得不在每个这些进程上做一个时间命令? 是否有可能join这些进程,就好像它们是一个线程?

在Linux上相当于SetPriorityClass

我有一个守护进程的应用程序,在初始化时执行一些磁盘密集型处理。 为了避免减慢其他任务,我在Windows上做了这样的事情: SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN); // initialization tasks SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END); // daemon is ready and running at normal priority AFAIK,在Unices上我可以调用nice或者setpriority,降低进程的优先级,但是我不能把它提升回到创build进程的时候(也就是说没有第二个SetPriorityClass调用的等价物),除非我拥有超级用户权限。 有没有其他的办法,我失踪了吗? (我知道我可以创build一个初始化线程,以低优先级运行,并等待它在主线程上完成,但我宁愿避免它) 编辑:奖励积分相当于SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN); 和SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);

如何检查php作业实例

在我的系统中,我已经安排了一个PHP作业来运行每分钟。 现在我想,如果这个工作的一个实例正在运行,并且需要超过1分钟,每分钟后启动的新实例检查是否有任何以前的实例正在工作,并且有任何以前的实例正在运行,新的实例会自行终止。我正在尝试system()命令,但无法弄清楚。 任何提示

在主机中,在Docker容器内运行的进程的PID是什么?

有几个进程在Docker容器中运行,它们的PID在容器名称空间中是隔离的,有没有办法找出Docker主机上的PID是什么? 例如,在Docker容器中运行Apache Web服务器(我使用Docker Hub的 Apache + PHP镜像),而Apache在启动时在容器内创build更多的工作进程。 这些工作进程实际上是处理传入的请求。 要查看这些进程,我在Docker容器中运行pstree : # pstree -p 1 apache2(1)-+-apache2(8) |-apache2(9) |-apache2(10) |-apache2(11) |-apache2(12) `-apache2(20) 父级Apache进程在容器进程名称空间内的PID 1上运行。 但是从主机的angular度来看,也可以访问它,但是主机上的PID是不同的,可以通过运行docker compose命令来确定: $ docker inspect –format '{{.State.Pid}}' container 17985 从这里我们可以看到容器进程名字空间中的PID 1映射到主机上的PID 17985。 所以我可以在主机上运行pstree来列出Apache进程的subprocess: $ pstree -p 17985 apache2(17985)─┬─apache2(18010) ├─apache2(18011) ├─apache2(18012) ├─apache2(18013) ├─apache2(18014) └─apache2(18164) 从这个angular度来看,我们假设容器中的PID 1如何映射到主机上的PID 17985,它也映射: 主机上的PID为18010的容器中的PID 8,以及 PID 9至PID 18011; PID 10到PID […]

在Linux中的C程序是否得到一个PID?

我有一个简单的C程序,当我用./output编译和运行它,它是否在Linux上得到一个PID? (我想,每个正在运行的程序都是一个进程,它应该有一个PID。) 我使用ps aux命令,但是我找不到进程名称。 我记得,当我的控制台应用程序(一个C程序)在Windows 7上运行时,我可以通过波动率工具获得它的PID。 #include<stdio.h> void main() { printf("Hello World!"); }

为什么僵尸进程是必要的?

维基百科基本上给出了我需要知道的关于僵尸进程的所有可能的信息,只是简单地介绍了它可能是有用的。因为在父进程创build另一个subprocess的事件中,PID中的冲突不会存在。 这是如何真正“有用”? 如果命名的僵尸进程被移除而不是被保留在那里,PID是不是可用的? 或者还有什么其他原因,为什么僵尸进程应该存在?

perl挂在出口(closures文件句柄后)

我有一个function,(简而言之): my $file = IO::File->new("| some_command >> /dev/null 2>&1") or die "cannot open some_command for writing: $!\n"; … undef $file; 现在我什至没有写任何$file 。 目前在$file中根本没有其他操作。 当我运行程序时,它不能正常退出。 我看到句柄已经closures了,但是我的程序还在等待这个过程closures。 捕获strace : close(6) = 0 rt_sigaction(SIGHUP, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGINT, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_IGN}, {SIG_DFL}, 8) = 0 wait4(16861, ^C <unfinished …> 如果我打开相同的阅读过程,我不会看到这个问题。 我该怎么做才能让程序退出? 编辑:到目前为止的build议是使用Expect库或完成inputstream通过CTRL […]

代码执行在subprocess中开始在哪里?

考虑下面的代码: #include <stdio.h> #include <errno.h> #include <sys/types.h> #include <unistd.h> /* main — do the work */ int main(int argc, char **argv) { pid_t child; if ((child = fork()) < 0) { fprintf(stderr, "%s: fork of child failed: %s\n", argv[0], strerror(errno)); exit(1); } else if (child == 0) { // do something in child } } […]

如何确定堆栈指针的初始值?

程序加载器初始化/加载text , data+bss区域。 这些都是在开始的虚拟地址空间进程中分配的。 这个堆会随着向更大的地址增长(在data + bss之后)。 堆栈从大到小的地址增长。 我想知道如何确定堆栈指针的初始值。 如果我要求每个进程的虚拟地址限制( ulimit -v ),我会得到 virtual memory (kbytes, -v) unlimited 现在,这个unlimited当然是指有限的位数可用于寻址的技术限制(在64位Linux上我记得48位?!) 那么,这是简单的,除非有一个不同的ulimit适用栈指针大致初始化为(开始vmem + 2 ^ 48位)?