Articles of вилкой

реализация трубы и redirect вместе в C

Я работаю над созданием минимальной оболочки в C. Я понимаю, как работает труба и redirect. У меня есть две программы, одна программа, которая обрабатывает redirect, например ls -l > outputfile . У меня есть другая программа, которая обрабатывает один канал, например ls – l | wc ls – l | wc . Главная проблема, с […]

Почему много PID печатаются при использовании системного вызова fork?

Я изучаю управление процессами в Linux, и я попытался реализовать следующую программу на C, выход которой напечатал 15 PID (4 уникальных PID). Я попытался выяснить семейное дерево процесса, но это действительно не помогло мне понять, почему PID были напечатаны столько раз. Я просмотрел несколько ссылок, в том числе http://u.cs.biu.ac.il/~linraz/os/OS2.pdf , http://www.ibm.com/developerworks/aix/library/au-unixprocess.html , Кто выполняет сначала […]

Труба для нескольких процессов

В настоящее время работает над некоторыми домашними заданиями и с трудом. objective состоит в том, чтобы генерировать 100 000 номеров и добавлять их все вместе, деля работу на 10 процессов (по 10 000 номеров каждая) Я думаю, что я понял, как обрабатывать процессы (надеюсь), но использование Pipe () для ретрансляции промежуточных итогов из каждого дочернего […]

выполнение if / else if / else с fork ()

Я пробовал реализовать программу os. Вот код: #include #include #include int main() { pid_t pid, pid1; pid = fork(); if(pid<0) { fprintf(stderr,"Fork Failed"); return 1; } else if(pid == 0) /* child process */ { pid1 = getpid(); printf("child: pid = %d\n",pid); printf("child: pid1 = %d\n",pid1); } else /* parent process */ { pid1 = […]

адресное пространство после вызова fork

При вызове fork () sys процессом выполняется дочерний процесс, сгенерированный из него. Все коды, следующие за вызовом fork (), копируются на новые физические страницы памяти, т.е. кадры. Я не могу визуализировать часть виртуальной памяти дочернего процесса. Потому что в следующем коде адрес переменной char такой же как у дочернего, так и для родительского. #include #include […]

C – значение wait (NULL) при выполнении fork () параллельно

В приведенном ниже коде вилки фактически работают параллельно или один за другим? В чем смысл wait(NULL) ? (Программа создает n число дочерних процессов, n передается через командную строку) int main ( int argc, char *argv[] ) { int i, pid; for(i = 0; i < atoi(argv[1]); i++) { pid = fork(); if(pid < 0) { […]

fork () системный вызов и пространство памяти процесса

Я цитирую «когда процесс создает новый процесс с использованием вызова fork (), разделяют только сегменты разделяемой памяти между родительским процессом и новым разветвленным дочерним процессом. Копии стека и кучи создаются для вновь созданного процесса» из «Концепции операционной системы» от Silberschatz. Но когда я попробовал эту программу, #include #include #define MAX_COUNT 200 void ChildProcess(void); /* child […]

Как убить дочерний процесс родительским процессом?

Я создаю дочерний процесс, используя fork() . Как родительский процесс может убить дочерний процесс, если дочерний процесс не может завершить его выполнение в течение 30 секунд? Я хочу разрешить дочернему процессу выполнять до 30 секунд. Если это займет более 30 секунд, родительский процесс убьет его. У вас есть идея сделать это?