Создайте Pthread, который выполняется до завершения в фоновом режиме

#c #multithreading #shell #pthreads

#c #многопоточность #оболочка #pthreads

Вопрос:

Я новичок в pthreads, и я пытаюсь создать свой собственный сценарий оболочки на C, который имеет множество простых входных данных, некоторые из которых занимают довольно много времени. Я хотел бы иметь возможность создавать pthread, который продолжает работать над такими задачами, в то время как я могу продолжать использовать оболочку для других команд.

Однако, независимо от того, что я пытаюсь, моя оболочка всегда, кажется, ожидает завершения самого последнего созданного pthread, прежде чем разрешить мне вводить что-либо еще.

Я намерен делать это исключительно с потоками, а не с дочерними процессами, поэтому fork() для меня здесь не вариант.

По сути, мой вопрос заключается в том, как я могу создать поток, который выполняется полностью независимо, до завершения, в фоновом режиме сценария оболочки, чтобы я мог продолжать использовать оболочку без значительных перерывов.

Комментарии:

1. пожалуйста, контекст? какая часть вашей программы на C создает pthread? Будьте конкретны в том, что вы пробовали.

Ответ №1:

Вы должны написать программу, которая создает pthread, который выполняет все, что вы хотите сделать. Давайте предположим, что у вас есть этот program .exe-файл, и он называется ‘MyProgram’. Если вы хотите создать скрипт, который предоставляет входные данные для MyProgram, не «замораживая» оболочку

 #!/bin/bash
./myProgram input_1 input_2 input_3 input_4amp;
./myProgram input_1 input_2 input_3 input_4;
  

Приведенный выше скрипт запускает MyProgram 2 раза с 2 наборами аргументов командной строки. Использование символа ‘amp;’ в конце второй строки заставляет MyProgram запускаться в фоновом режиме, поэтому вы можете продолжать использовать оболочку. Если вы хотите запустить MyProgram несколько раз, просто добавьте ‘amp;’ в конце каждой команды запуска. Каждое выполнение программы будет выполняться в фоновом режиме, и вы сможете продолжать использовать оболочку, пока программы все еще работают.