Может ли кто-нибудь объяснить мне, почему это происходит с os.fork () [duplicate]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

6
задан user3490561 2 July 2014 в 19:29
поделиться

2 ответа

После возврата из fork у вас теперь есть два процесса , выполняющие код сразу после fork.

Итак, ваше утверждение:

, так как мы уже находимся в родительском процессе

, является только неполным. После возврата os.fork родительский процесс продолжает выполнять код в качестве родительского процесса, но дочерний процесс продолжает выполнение точного кода с теми же локальными и глобальными переменными, за исключением возвращаемого значения из fork. Итак, с точки зрения дочернего процесса newRef имеет значение 0, а с точки зрения родителя newRef имеет положительное значение. Оба процесса будут выполнять код соответственно.

16
ответ дан Chris Barker 17 August 2018 в 21:47
поделиться

Когда вы вызываете os.fork, вы создаете новый процесс, который является точной копией существующего процесса , кроме , который в исходном процессе fork возвращает идентификатор процесса нового (дочернего ), а в новом процессе fork возвращает 0. Это различие заключается в том, как вы можете сделать что-то другое в родительском и дочернем.

В вашем конкретном коде возвращаемое значение fork в дочернем элементе 0, поэтому дочерний процесс вызывает child. В родительском объекте возвращаемое значение не является 0, поэтому выполняется условие else.

7
ответ дан murgatroid99 17 August 2018 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: