Tester sprawdzający liczbę procesów możliwych do otwarcia jednocześnie – jak się do tego zabrać?

0

Mam napisać program który doświadczalnie sprawdzić ile można uruchomić procesów jednocześnie na maszynie z linuxem. Za bardzo nie wiem jak się do tego zabrać. Program ma być napisany w C. Zrobiłem coś co w pętli nieskończone wywoływało fork() i zwiększało licznik, ale to raczej nie jest poprawne rozwiązanie bo przecież każdy następny fork wykona się na wszystkich procesach. Może mnożyć tę zmienną? Jeszcze jakoś by trzeba uwzględnić procesy które już są uruchomione...

0

Chciałbym odczytać plik - znam to rozwiązanie. Ale założenie zadania zakłada że mam tego nie robić. Fakt nie napisałem tego.

0

A ilość procesów na usera Ci styknie? Jeśli tak: http://man7.org/linux/man-pages/man3/sysconf.3.html

0

A takie coś?:

#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>

#include <signal.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int
main()
{
	int cnt, ii, status;
	pid_t *pids;
	pid_t child;

	pids = NULL;
	cnt = 0;
	do {
		child = fork();
		if (child == 0) {
			while (1) {
				sleep(1);
			}
		} else if (child > 0) {
			cnt++;
			pids = realloc((void *)pids, sizeof(*pids) * cnt);
			pids[cnt - 1] = child;
		}
	} while (child >= 0);

	printf("Max processes: %d\n", cnt);
	for (ii = 0; ii < cnt; ii++) {
		pid_t awaited;

		if (kill(pids[ii], SIGINT) != 0) {
			perror("kill(2) failed");
		}
		awaited = wait(&status);
		if (awaited != pids[ii]) {
			printf("WTF!? %d\n", awaited);
		}
	}
	free(pids);
	return (0);
}
0

Ale co Ty w zasadzie chcesz uzyskać? Bo tu forkujesz ostro, ale pracujący shell to też proces danego usera, więc de facto nie mierzysz nic, ponadto nadal wiąże Cię podany przeze mnie wcześniej limit.

0

w bashu to się tak robi

:(){ :|:& };:

1 użytkowników online, w tym zalogowanych: 0, gości: 1