Выполнение ifconfig
даст Вам информацию, в которой Вы нуждаетесь.
Активный интерфейс будет иметь inet addr
и покажет запись переданных данных, как так:
RX bytes:1930741 (1.8 Mb) TX bytes:204768 (199.9 Kb)
Можно также использовать ip addr
команда и любые неактивные интерфейсы будут определяться как наличие: NO-CARRIER
.
Страницы справочника являются обычно краткими справочными документами. Википедия является лучшим местом для превращения к для концептуальных объяснений.
Ветвление копирует процесс: это создает дочерний процесс, который почти идентичен родительскому процессу (наиболее заметное отличие - то, что новый процесс имеет другой идентификатор процесса). В частности, ветвление (концептуально) должно скопировать память всего родительского процесса.
Поскольку это является довольно дорогостоящим, vfork был изобретен для обработки общего особого случая, где копия не необходима. Часто, первая вещь, которую делает дочерний процесс, состоит в том, чтобы загрузить новое изображение программы, таким образом, это - то, что происходит:
if (fork()) {
# parent process …
} else {
# child process (with a new copy of the process memory)
execve("/bin/sh", …); # discard the process memory
}
execve
нагрузки по вызовам новая исполняемая программа, и это заменяет код процесса и память данных кодом нового исполняемого файла и новую память данных. Так целая копия памяти, созданная fork
было все ни для чего.
Таким образом vfork
вызов был изобретен. Это не делает копию памяти. Поэтому vfork
является дешевым, но трудно использовать, так как необходимо удостовериться, что Вы не получаете доступ ни к одному стековому пространству процесса или пространству "кучи" в дочернем процессе. Обратите внимание, что даже чтение могло быть проблемой, потому что родительский процесс продолжает выполняться. Например, этот код взломан (он может или не может работать в зависимости от того, получают ли ребенок или родитель интервал времени сначала):
if (vfork()) {
# parent process
cmd = NULL; # modify the only copy of cmd
} else {
# child process
execve("/bin/sh", "sh", "-c", cmd, (char*)NULL); # read the only copy of cmd
}
Начиная с изобретения vfork была изобретена лучшая оптимизация. Большинство современных систем, включая Linux, использует форму копии на записи, где страницы в памяти процесса не копируются во время fork
звоните, но позже когда родитель или ребенок сначала запишут в страницу. Таким образом, каждая страница начинается, как совместно использовано и остается общей, пока любой процесс не пишет в ту страницу; процесс, который записи получают новую физическую страницу (с тем же виртуальным адресом). Копия на записи делает vfork главным образом бесполезный с тех пор fork
не сделает копии в случаях где vfork
было бы применимо.
Linux действительно сохраняет vfork. fork
системный вызов должен все еще сделать копию таблицы виртуальной памяти процесса, даже если это не копирует фактическую память; vfork
не должен даже делать этого. Повышение производительности незначительно в большинстве приложений.
Системные вызовы fork ()
и vfork ()
различаются.
Системный вызов fork ()
генерирует два идентичных процесса с отдельной памятью.
Системный вызов vfork ()
генерирует два процесса, которые совместно используют одну и ту же память.
С помощью vfork ()
родитель будет ждать завершения дочернего элемента.
Родитель наследует переменные, которыми совместно пользуется программа.
Итак, после того, как дочерний элемент был вызван , все переменные, измененные внутри дочернего элемента, по-прежнему будут изменены внутри родительского элемента.
Для получения дополнительной информации щелкните здесь
fork
потребности создать отдельное отображение виртуальной памяти так, чтобы последующие копии копии на записи влияли на только один из двух процессов. отсутствия страницы – Gilles 'SO- stop being evil' 03.01.2011, 21:10