Discussione: [Linux] le syscall
View Single Post
Old 23-06-2009, 10:04   #33
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
grazie

ho preso del codice postato da un utente e dopo compilazione l'ho lanciato più volte

Codice:
#include <stdio.h>
#include <sys/types.h>
void main()
{
	pid_t pid;
	printf (“Prima della fork: PID = %d\n”, getpid());
	pid = fork();
	if (pid==0) /* PROCESSO FIGLIO*/
	{
		printf (“FIGLIO: PID = %d\n”, getpid());
		exit(0);
	}
	else /* PROCESSO PADRE */
	{
		printf (“PADRE: PID = %d\n”, getpid());
		printf (“PADRE: PID DEL FIGLIO = %d\n”, pid);
		exit(0);
	}
}
digitando ps mi viene mostrato il PID della shell sh che è 92 mentre il PPID di questo programma mandandolo in esecuzione è 92 e il suo PDI è 219.
Quel 92 mi fa capire che il programma che io ho chiamato test è figlio di sh e quindi quando la shell manda in esecuzione test duplica se stessa.
Lanciando test più volte si nota il seguente output:

primo caso
Prima della fork: PID = 219
FIGLIO: PID = 220
PADRE: PID = 219
PADRE: PID DEL FIGLIO = 220

secondo caso
Prima della fork: PID = 227
PADRE: PID = 227
PADRE: PID DEL FIGLIO = 228
FIGLIO: PID = 228


sembrerebbe che si ha una duplicazione della shell e che quindi test diviene una copia della shell ma a sua volta una volta in esecuzione test, questo viene duplicato immediatamente nel primo caso e successivamente nel secondo caso: è dovuto allo scheduler questo effetto ?
misterx è offline   Rispondi citando il messaggio o parte di esso