创建一个程序来计算系统中的最大进程数
Create a program to calculate the maximum number of processes in the system
我有以下代码,我正在尝试计算所有过程。我不明白如何计算最大进程数。
#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;
}
有比通过实验更简单的方法来做到这一点。
大多数 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 and also this answer。
这可以通过计算 /proc
目录中存在的编号目录的数量来实现。这些编号的目录是当前 运行.
进程的 PID
/proc
简称进程信息伪文件系统。
欲了解更多信息,您可以访问,
http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
我写了一些小代码,给出了进程数 运行。
#include <stdio.h>
#include <dirent.h>
int main()
{
DIR* proc = opendir("/proc");
struct dirent* ent;
int count = 0;
if(proc == NULL) {
perror("opendir(/proc)");
return 1;
}
while(ent = readdir(proc)) {
if(!isdigit(*ent->d_name))
continue;
count++; //if directory name is number then increment the count.
}
closedir(proc);
printf("Number of Processes=%d\n",count);
return 0;
}
查看 proc(5) 的文档,您会在进程字段中看到:
Number of forks since boot.
所以这根本不是您要查找的号码。 ps 会给你,正如你已经知道的那样,计算 /proc 下名称中只有数字的目录是另一种方法。
ulimit
可能会将每个用户的最大进程限制为小于最大 pid。
ulimit -u 表示用户在特定时间可以拥有的总进程数。上面的命令 returns 我的输出为 63203。这意味着对于用户在某个时间点创建的所有进程,用户可以拥有 63203 个进程 运行。
您将获得给定机器上 运行 个进程的总数
ps -e | wc -l
我有以下代码,我正在尝试计算所有过程。我不明白如何计算最大进程数。
#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;
}
有比通过实验更简单的方法来做到这一点。
大多数 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 and also this answer。
这可以通过计算 /proc
目录中存在的编号目录的数量来实现。这些编号的目录是当前 运行.
/proc
简称进程信息伪文件系统。
欲了解更多信息,您可以访问,
http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
我写了一些小代码,给出了进程数 运行。
#include <stdio.h>
#include <dirent.h>
int main()
{
DIR* proc = opendir("/proc");
struct dirent* ent;
int count = 0;
if(proc == NULL) {
perror("opendir(/proc)");
return 1;
}
while(ent = readdir(proc)) {
if(!isdigit(*ent->d_name))
continue;
count++; //if directory name is number then increment the count.
}
closedir(proc);
printf("Number of Processes=%d\n",count);
return 0;
}
查看 proc(5) 的文档,您会在进程字段中看到:
Number of forks since boot.
所以这根本不是您要查找的号码。 ps 会给你,正如你已经知道的那样,计算 /proc 下名称中只有数字的目录是另一种方法。
ulimit
可能会将每个用户的最大进程限制为小于最大 pid。
ulimit -u 表示用户在特定时间可以拥有的总进程数。上面的命令 returns 我的输出为 63203。这意味着对于用户在某个时间点创建的所有进程,用户可以拥有 63203 个进程 运行。
您将获得给定机器上 运行 个进程的总数
ps -e | wc -l