2014-12-03 4 views
1

Возможно ли выполнить команду оболочки, создав поток, то есть без использования popen/system или любого из вариантов fork-exec? Почему или почему нет?Выполнение команды оболочки с помощью потоков C++

Чтобы обеспечить больше контекста, я запускаю многопоточную программу, где один из потоков должен выполнять сценарий оболочки. В настоящее время он использует popen(). Однако, поскольку разветвление в многопоточной программе считается плохой практикой, можно ли добиться того же путем нереста потока?

+0

Я не вижу примеров в Интернете. Не могли бы вы привести пример того, как можно выполнить команду оболочки с помощью потоков на C++? – user1715122

+0

Не понимаю. Если я хочу выполнить команду «ls», я могу сделать систему («ls») на C++. Как я могу использовать std-потоки, чтобы сделать то же самое? – user1715122

+0

Чтобы указать больше контекста, я запускаю многопоточную программу, в которой один поток должен выполнить некоторый сценарий оболочки. В настоящее время я делаю popen() для выполнения этого сценария оболочки. Это плохо, так как я не хочу развиваться в многопоточной программе. Итак, я хотел знать, как я могу выполнить этот сценарий оболочки без использования fork. Можно ли создать другой поток и выполнить этот сценарий оболочки? – user1715122

ответ

1

Вот полезное резюме на многопоточность & вилочных + EXEC потенциальных проблем: http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them

кажется, что если вы хотите выполнить другие программы и даже оболочки сценариев, вы должны использовать вилку + EXEC, это неизбежно , Просто будьте осторожны и подготовьте свои темы для такого «плохого» события, как fork. Кроме того, вы можете закрыть все ненужные дескрипторы файлов в специальном однопоточном доверенном помощнике выполнения, который запускается из основного приложения, если это проблема.