Использование system () в потоке переполнения стека

Я хочу использовать метод system () в (неосновном) потоке (pthread) в C ++. Например,

system("/path/to/some/script.sh");

Это разрешено? Если так, это безопасно и есть ли какие-то меры предосторожности, которые я должен предпринять?

Причина, по которой я спрашиваю, состоит в том, что я получил следующий комментарий от рецензента кода:

«Правило system () может быть вызвано только из однопоточного процесса. Я думаю, вам нужно перенести новый код в отдельное приложение».

Является ли первое предложение комментария действительным?

1

Решение

Начиная с реализации GNU / Linux system, он изменяет процесс маска сигнала при выполнении команды. В многопоточной программе нас ждут неприятные сюрпризы, например, если другой поток forkв то же время.

5

Другие решения

Я бы не стал делать это по множеству разных причин, проблема с масками сигналов просто одна.

В общем, fork и нити — сложная смесь, и с ней нужно обращаться осторожно. Существующие библиотечные функции, вероятно, не были написаны с учетом многопоточной программы.

0

По вопросам рекламы [email protected]