Я запускаю программу, в которой она запускает несколько процессов (в данном случае, команд). Я застрял в запуске нескольких процессов, так как он повторяет и запускает фрагменты кода несколько раз. У меня МНОГО проблем, пытающихся следить за тем, что происходит.
Я уже посмотрел множество видео на YouTube и другие вопросы SO по этому поводу.
Ниже приведен вариант моего кода, включая псевдокод:
int forking(char **command) {
pid_t parentPID = getpid();
pid_t childPID = fork();
if(childPID < 0) {
printf("Fork failed\n");
} else if(childPID == 0) { //child process
printf("Child PID: %d\n", getpid());
} else {
printf("Parent PID: %d\n",
}
}
int main() {
//open file of commands, each spaced by a newline
printf("Main PID: %d\n", parentPID);
while((getline(&command, &len_buffer, file_pointer)) != -1) {
printf("-----------------\n);
//parse command using strtok() to use execvp()
pid = forking(parsed_command_array);
if(pid == parentPID) {
printf("This is the parent: %d\n", pid);
else {
printf("This is child, pid is: %d\n", pid);
}
}
}
Кажется, что выводятся следующие выходные данные для 2 команд:
------------------------
Main PID: 42729
Parent PID: 42729
This is parent: 42729
------------------------
Main PID: 42729
Child PID: 42730
This is child, pid is: 42730
------------------------
Main PID: 42729
Parent PID: 42729
This is parent: 42729
Child PID: 42731
This is child, pid is: 42731
Parent PID: 42730
This is child, pid is: 42730
Child PID: 42732
This is child, pid is: 42732
Я хотел, чтобы код для каждой команды в цикле while: 1Разобрать команду для execvp (что я уже сделал) 2. Вызвать fork в функции и вернуть PID. Если PID является родительским, игнорируйте, если PID является дочерним, напечатайте PID.
Я также хотел сохранить элемент управления в родительском элементе, чтобы при запуске fork я хотел получить дочерний элементPID, запустите процесс в потомке, затем вернитесь к родителю.
Я просто не уверен, что делаю не так, и меня очень смущает вопрос, почему родитель запускал изначально, затемво втором цикле через while он выводит дочерний процесс, затем в третьем цикле печатает родительский, а затем команду 3 раза.