আমার কাছে এইচপি-ইউএক্স উপলব্ধ নেই এবং আমি কখনও বড় এইচপি-ইউএক্স ফ্যান হতে পারি না।
এটি উপস্থিত হয় যে লিনাক্সে, প্রতি-প্রক্রিয়া বা কতগুলি শিশু প্রক্রিয়া বিদ্যমান তার প্রতি ব্যবহারকারী-সীমা হতে পারে। আপনি এটি limit
অন্তর্নির্মিত Zsh দিয়ে দেখতে পাচ্ছেন (মনে হচ্ছে এটি ব্যাশের সাথে সাদৃশ্যপূর্ণ ulimit -u
):
1002 % limit
cputime unlimited
filesize unlimited
datasize unlimited
stacksize 8MB
coredumpsize 0kB
memoryuse unlimited
maxproc 16136
...
এটি একটি আর্চ লিনাক্স ল্যাপটপে রয়েছে।
এই সীমাটি পরীক্ষা করতে আমি একটি ছোট প্রোগ্রাম লিখেছি:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
volatile int sigchld_cnt = 0;
voida
sigchld_hdlr(int signo)
{
++sigchld_cnt;
}
int
main(int ac, char **av)
{
int looping = 1;
int child_cnt = 0;
int status;
signal(SIGCHLD, sigchld_hdlr);
printf("Parent PID %d\n", getpid());
while (looping)
{
switch (fork())
{
case 0:
_exit(0);
break;
case -1:
fprintf(stderr, "Problem with fork(), %d children: %s\n",
child_cnt, strerror(errno));
looping = 0;
break;
default:
++child_cnt;
break;
}
}
fprintf(stderr, "Sleeping, forked %d child processes\n", child_cnt);
fprintf(stderr, "Received %d sigchild\n", sigchld_cnt);
sleep(10);
looping = 1;
do {
int x = wait(&status);
if (x != -1)
--child_cnt;
else if (errno != EINTR) {
fprintf(stderr, "wait() problem %d children left: \%s\n",
child_cnt, strerror(errno));
looping = 0;
}
} while (looping);
printf("%d children left, %d SIGCHLD\n", child_cnt, sigchld_cnt);
return 0;
}
wait(2)
পর্যাপ্ত সময় কল করে সমস্ত জম্বি "সংগ্রহ" করা আশ্চর্যজনকভাবে কঠিন ছিল । এছাড়াও, প্রাপ্ত সিআইসিএইচএলডি সংকেতগুলির সংখ্যা কখনই শিশুদের প্রক্রিয়াজাতের সংখ্যার মতো হয় না: আমি বিশ্বাস করি যে লিনাক্স কার্নেলটি কখনও কখনও প্রচুর উত্সাহিত শিশু প্রসেসের জন্য 1 এসএইচসিএলডি প্রেরণ করে।
যাইহোক, আমার আর্চ লিনাক্স ল্যাপটপে, আমি 16088 শিশু প্রসেসগুলি কাঁটাচামচ করে পেয়েছি এবং এটি জম্বি সংখ্যা হতে হবে, কারণ প্রোগ্রামটি wait(2)
সিগন্যাল হ্যান্ডলারে সিস্টেম কল করে না ।
আমার স্ল্যাকওয়ার 12 সার্ভারে, আমি 6076 শিশু প্রক্রিয়াগুলি পাই যা মানটির সাথে ঘনিষ্ঠভাবে মেলে maxproc 6079
। আমার ব্যবহারকারীর আইডিতে আরও 2 টি প্রক্রিয়া চলছে sshd
এবং জেডএস। উপরের প্রোগ্রামটির প্রথমটি, নন-জম্বি উদাহরণ সহ যা 6079 করে।
fork(2)
সিস্টেম কল একটি "রিসোর্স সাময়িকভাবে অনুপলব্ধ" ত্রুটি সহ ব্যর্থ। কী সংস্থান অনুপলব্ধ রয়েছে তার অন্য কোনও প্রমাণ আমি দেখতে পাচ্ছি না। আমি যদি আমার প্রোগ্রামটি 2 টি ভিন্ন এক্সটারমে একযোগে চালিত করি তবে কিছুটা আলাদা নম্বর পাই তবে তারা একই সংখ্যায় যুক্ত হয় যেন আমি এটি এক xterm তে চালাই। আমি ধরে নিলাম এটি সারণী এন্ট্রিগুলি, বা অদলবদল বা কিছু সিস্টেম-বিস্তৃত উত্স প্রক্রিয়া করে, এবং কেবল একটি স্বেচ্ছাসেবী সীমা নয়।
এই মুহূর্তে এটি চেষ্টা করার জন্য আমার আর কিছু চালাচ্ছে না।