Я хочу использовать метод system () в (неосновном) потоке (pthread) в C ++. Например,
system("/path/to/some/script.sh");
Это разрешено? Если так, это безопасно и есть ли какие-то меры предосторожности, которые я должен предпринять?
Причина, по которой я спрашиваю, состоит в том, что я получил следующий комментарий от рецензента кода:
«Правило system () может быть вызвано только из однопоточного процесса. Я думаю, вам нужно перенести новый код в отдельное приложение».
Является ли первое предложение комментария действительным?
Начиная с реализации GNU / Linux system
, он изменяет процесс маска сигнала при выполнении команды. В многопоточной программе нас ждут неприятные сюрпризы, например, если другой поток fork
в то же время.
Я бы не стал делать это по множеству разных причин, проблема с масками сигналов просто одна.
В общем, fork
и нити — сложная смесь, и с ней нужно обращаться осторожно. Существующие библиотечные функции, вероятно, не были написаны с учетом многопоточной программы.