2016-10-25 2 views
-3
#include <sys/types.h> 
#include <stdio.h> 
#include <unistd.h> 

int value = 5; 
int main() 
{ 
    pid t pid; 
    pid = fork(); 
    if (pid == 0) { 
    value += 15; 
    return 0;} 
    else if (pid > 0) { /* parent process */ 
     wait(NULL); 
    printf("PARENT: value = %d",value); /* LINE A */ 
       return 0;}} 

Сколько дочерних процессов создано и какое значение напечатано в строке A?Сколько дочерних процессов создается в следующем коде

+3

Что мешает вам просто попробовать? – Ari0nhh

+0

Обратите внимание, что стиль Pico на самом деле не является приемлемым (приемлемым) макетом для кода C. Пожалуйста, выберите один из [Allman или 1TSB] (https://en.wikipedia.org/wiki/Indent_style), если нет веских причин, чтобы сделать иначе - и вы должны быть готовы объяснить, почему эти причины являются убедительными. Если вы видите неаккуратное отступы, вы не слишком внимательно следите за стилем Pico. –

+0

Родительский процесс будет печатать 5. Создается только один процесс. –

ответ

1

Вы попробовали?

Создается только один ребенок, а родительский печатает значение 5, поскольку оно не изменяется в родительском процессе. Глобальные переменные имеют копию в каждом из процессов, они не используются совместно.

+0

Да, на самом деле я только начал изучать C, я просто немного путаюсь в отношении процесса с детьми и родительского процесса. – Alex

+0

«Одинокий ребенок создан, и он печатает 5» неправильно: ребенок ничего не печатает. Вилка возврата val для дочернего элемента равна 0. «Как не изменено в родительском процессе» неверно: родительский/дочерний процесс может изменять значение по своему усмотрению, это не повлияет на другой процесс, так как «значение» - это глобальная переменная, которая дублируется на развилке. Каждый процесс имеет свою ценность. –

+1

@TonyTannous: Правильный комментарий, Тони, я признаю, что это могло сбивать с толку из моего первоначального предложения. Я внес поправки в это предложение. –

Смежные вопросы