У меня есть эта многопроцессном программа в C:Multiprocessing программа не дают желаемые результаты
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
pid_t i = fork();
if(i == 0)
{
execv("./prcs1", (char *[]){ "./prcs1", argv[1], NULL});
_exit(1);
}
else if (i > 0)
{
execv("./prcs2", (char *[]){ "./prcs2", argv[0], NULL});
_exit(2);
}
else
{
perror("Fork failed");
_exit(3);
}
}
В этой программе ./prcs1
и ./prcs2
являются двумя исполняемыми файлами двух различных программ. ./prcs1
дает выход как Syscall finished
и ./prcs2
дает выход Stdlibrary finished
. И я получаю следующий результат в каждом цикле:
Syscall finished
Stdlibrary finished
Теперь мои вопросы:
- Работает ли программа выше двух процессов
prcs1
иprcs2
параллельно? - Если он работает параллельно, тогда я получаю один и тот же результат каждый раз, или я также могу получить вывод, на который приходит
Stdlibrary finished
, иSyscall finished
на втором месте? Если это будет возможно, то почему я получаю одинаковый результат в каждом прогоне?
Сколько времени требуется для выполнения? Если, например, 'Syscall' намного быстрее, чем' Stdlibrary', то вы получите тот же результат почти всегда. – VHarisop
@VHarisop Когда я запускаю две программы отдельно, используя время, я получаю: real \t 0m0.044s, user 0m0.000s, sys 0m0.041s для программы Syscall и real \t 0m0.028s, user 0m0.019s, sys 0m0 .001s для процесса Stdlibrary. Итак, глядя на это время, будет ли результат всегда таким же? –
Нет, они кажутся довольно сопоставимыми. Вы должны заглянуть в ответ Йоахима. – VHarisop