В то время как функция exec () используется для замены текущей существующей программы на новую. Эта замена выполняется путем внесения изменений в содержимое программы или файла. Таким образом, различие между fork и exec состоит в том, что fork создает новый процесс из существующего процесса, а exec используется для замены существующей программы путем создания новой.
Предпосылки
Чтобы выполнить любую программу c в вашей системе Linux, нам необходимо установить на нее некоторые предварительные условия. Перейдите в терминал с помощью метода быстрого доступа Ctrl + Alt + T. Теперь напишите следующие команды для установки страниц руководства.
$ sudo apt install manpages-dev
Он установит все соответствующие страницы.
Двигаясь вперед, чтобы запустить программу в Linux, вам необходимо установить компилятор кода. Это используется для компиляции кода и его выполнения. Для этого установим в нашу систему репозитории GCC.
$ sudo apt install GCC
Кодирование с помощью exec на c
Поскольку мы установили справочные страницы в Linux, мы будем использовать следующую команду, чтобы увидеть описание, касающееся exec. Основной синтаксис образца следующий:
Синтаксис
Exec (путь / файл, argv);Здесь мы использовали «unistd.h », так как он содержит всю информацию о семействах функций exec.
$ man exec
Теперь на процитированном выше изображении вы можете увидеть типы exec. Это семейство функций exec. Каждый из них предназначен для разных функций, следующих за одной и той же базой: «exec.”
Пример: Теперь, двигаясь дальше, опишем функционал exec на примере. Мы возьмем одну функцию из exec, чтобы продемонстрировать ее работу, это «execv.«Сначала мы создадим два файла с расширением«.c.«После их создания мы напишем в них соответствующие коды и выполним их, чтобы увидеть результат.
Рассмотрим имя файла «sample4».c ”. Пожалуйста, откройте его и используйте следующий код. В этом коде мы использовали execv определенным образом, указанным ниже.
Execv ("./ sample4copy », аргументы);Первая часть содержит новый путь к каталогу, а вторая часть показывает массив аргументов в качестве параметра, который мы передали.
Образец4.c
Прежде всего, мы распечатали идентификатор текущего процесса. Во-вторых, мы создали символьный массив с NULL в конце для завершения. В-третьих, мы вызвали функцию sample4copy.
Sample4copy.cКогда мы вызываем функцию exec (), изображение процесса изменяется. На приведенном ниже изображении показан код sample4copy.c.
Здесь мы использовали только операторы печати, чтобы получить идентификатор текущего процесса.
Вывод соответствующих кодов может быть получен с помощью следующих команд.
$ GCC-o sample4 sample4.c$ GCC -o sample4copy sample4copy.c
$ ./ sample4
Как мы описали ранее, слово «GCC» используется для компиляции кода, и после компиляции код успешно выполняется.
Согласно изображению, PID sample4.c файл отображается первым, поскольку он был объявлен перед вызовом exec. Затем после вызова функции exec () оба оператора печати файла sample4copy.c выполняется, где getpid () используется для получения идентификатора процесса.
Кодирование вилкой в c
Функция fork () создает дочерний процесс из родительского процесса. Он также содержит два заголовка, включая информацию о вилке в нем.
Синтаксис:
Вилка Pid_t (недействительна);Мы можем использовать справочную страницу для помощи в использовании
вилка $ man
Пример: Теперь рассмотрим пример, создав файл «sample3.c ”. Введем код внутрь файла. Согласно коду мы установили статус вилки как forkrank.
Образец3.c
Мы использовали оператор if-else для применения условия. Здесь объявлены простые команды печати, чтобы помочь в понимании концепции fork (). Forkrank сначала объявляется как 0, а затем как -1. С fork () теперь есть два процесса, которые работают одновременно. Вывод может быть получен с помощью того же кода, который использовался выше в примере exec.
$ GCC -o sample3.c$./ sample3
Выходные данные показывают, что дочерний процесс выполняется раньше, чем родительский, когда родительский процесс ожидал. Функция ожидания подразумевает, что она заставляет родительскую функцию ждать, пока один из всех дочерних процессов не будет завершен.
Системные вызовы Fork и Exec вместе
Здесь мы возьмем два файла с именем «sample1».c »и« sample2 ».c ”. Сначала откройте файл sampl1.c и напишите код, который добавлен ниже на изображении. Здесь мы использовали системный вызов fork (); при создании дочернего процесса p будет присвоено 0. При использовании системного вызова exec образец1.c будет заменен на sample2.c.
Образец1.c
Образец2.c
Подобно примерам, рассмотренным выше, файл sample2 будет содержать в себе операторы printf. В sample1.c, сначала выполняется первая команда печати, затем вызывается функция fork, когда p == 0, выполняется дочерняя часть и sample2.c файл будет запущен. Вывод будет содержать GCC для компиляции обоих файлов. Здесь родительский образец1.c id и sample2.c id отличается, потому что они родительский и дочерний.
Заключение
В этой статье мы использовали как fork, так и exec по отдельности и вместе, чтобы легко понять использование и концепцию. Я надеюсь, что этот учебник содержит достаточно контента, который поможет расширить ваши знания.