Gå til innhold

Hva er verdiene av pid1/pid2?


Anbefalte innlegg

Hei, jeg er litt usikker på et par oppgaver, håper i den anledning at jeg kan få litt hjelp her.

Hva er verdiene av pid1/pid2 ved linjene A, B, C, D. Vi antar at pid til forelder prosessen er 2600 og pid til barneprosessen er 2601.
 
pid_t pid1,pid2;
pid1 = fork();
if(pid1 == 0) {
    pid2 = getpid();
    printf("A: %d", pid1);
    printf("B: %d", pid2);
} else {
    pid2 = getpid();
    printf("C: %d", pid1);
    printf("D: %d", pid2);
    wait(NULL);
}

A er grei, for den er 0.

Men hva med B, c og d?

Er veldig usikker, men kan det være: b= 2600, c=2601 og d=2600?

Her er enda en.
Her skal jeg finne ut hvor mange unike prosesser og tråder som blir opprettet.

Jeg har komt frem til at det er 3 unike prosesser og 1 unik tråd som har blitt opprettet. Er dette riktig?

pid_t pid;
 
pid = fork();
if (pid == 0)
fork();
thread_create( . . . );
}
fork();

OG siste:

Her skal jeg finne ut hva som blir skrevet ut.
Jeg har komt frem til at det i linje c og p blir skrevet ut i linje c: 0 og linje p: 5.

Stemmer dette?

int value = 0;
void *runner(void *param);
int main(....) {
  pid_t pid;
  pthread_t tid;
  pthread_attr_t attr;
  pid = fork();
  if(pid == 0) {
   pthread_attr_init(&attr); // set defualt thread attributes
   pthread_create(&tid,&attr,runner,NULL);
   pthread_join(tid,NULL);
   printf("Linje C: %d", value);
  } else if (pid > 0) {
      wait(NULL);
   printf("Linje P: %d", value); }
}void *runner(void *param) {
value = 5;
pthread_exit(0);
Endret av 13375k1133z
Lenke til kommentar
  • 5 uker senere...
Videoannonse
Annonse

I den første: Såvidt jeg kan se har du 3/4 riktig. For den som er feil, tenk på hva getpid returnerer i en gitt prosess.

 

I den andre: Nei, det tror jeg blir feil. Som en start - hvis du gjør fork() og ikke sjekker hva den returnerte, hvor mange ganger blir den neste kodelinjen kjørt?

Det kan lønne seg å tegne dette på et ark for å få oversikt.

 

Den tredje er jeg ikke våken nok til å se på akkurat nå.

Endret av Djn
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...