我有以下代码,我试图计算所有流程。我不明白如何计算最大进程数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int pid, pidmax = 0;
while(1)
{
pid = fork();
pidmax = getpid();
if(pid == 0){
if(pidmax < getpid())
pidmax = getpid();
printf("pid: %d, max: %d\n", getpid(), pidmax);
return 0;
}
if(pid == -1) {
printf("Maximum process: %d\n", pidmax);
exit(-1);
}
}
return 0;
}
答案 0 :(得分:3)
有更简单的方法可以做到这一点,而不是通过实验。
大多数Unix系统提供ulimit
来向您显示帐户的各种软(即用户定义)和硬(即管理员定义)限制。例如,这是我对OS X的软硬限制。
$ ulimit -a -S
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
$ ulimit -a -H
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) unlimited
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 65532
cpu time (seconds, -t) unlimited
max user processes (-u) 1064
virtual memory (kbytes, -v) unlimited
虽然系统可能支持更多进程,但您的程序将受到这些限制的限制。我被限制在709(奇怪的数字)处理并且可以将其提升到1064。
单次处理的最大进程数受pid_t
的大小限制,并且通常受内核中定义的限制的限制。有关详细信息,请参阅this answer和this answer。
答案 1 :(得分:0)
查看proc(5)的文档,您将在进程字段中看到这一点:
ulimit
所以它根本不是你要找的号码。 ps会告诉你,正如你已经知道的那样,在/ proc下用名字中的数字计算目录是另一种方法。
ps -e | wc -l
可能会将最高每用户进程限制为小于最大pid。
ulimit -u,表示用户在特定时间可以拥有的总进程数。上面的命令将输出返回为63203.这意味着对于用户在某个时间点创建的所有进程,用户可以运行63203个进程。
您将获得给定计算机上正在运行的进程总数
<style type="text/css" rel="stylesheet">
答案 2 :(得分:-1)
这可以通过计算// simplest
$str = implode(',',array_map('implode',$arr));
目录中存在的编号目录的数量来实现。这些编号的目录是当前正在运行的PID进程。
/proc
称为进程信息伪文件系统。
有关更多信息,您可以访问,
http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
我编写了一些小代码,可以运行多个进程。
/proc