запускать и останавливать команду оболочки linux из программы ac без блокировки текущего выполнения [решено]
while(variable > 0){
updatevariable(); //variable gets updated from UDP serevr.
// i want to execute a shell command here without blocking current execution.
}
Я попытался использовать функцию system(), но она блокирует текущее выполнение, я должен иметь возможность остановить команду оболочки, если условие не удовлетворяет, и не должен ждать, пока команда оболочки завершит выполнение. (я использую команду оболочки rtl_fm, и она не останавливает выполнение, пока мы не остановим ее вручную). Я пишу этот код специально для ОС Linux. И я точно знаю время, когда переменная падает ниже 0. Есть ли способ выполнить команду оболочки в течение определенного периода времени?
еще не пробовал процесс, потоки. PS: Это мой первый вопрос по этой платформе.
1 ответ
Вам нужно создать новый процесс с помощью fork или clone
int clone(int (*fn)(void *), void *stack, int flags, void *arg, ...
/* pid_t *parent_tid, void *tls, pid_t *child_tid */ );
(если вам нужен более точный контроль над тем, какие части контекста выполнения разделяются между вызывающим процессом 'parent' и дочерним процессом. см. clone_man_pages, тогда вы можете отправить своего недавно созданного дочернего элемента для запуска другого кода (без ожидания или блокировки вашей текущей оболочки). Это делается с помощью семейства системных вызовов exec exec_family_man_pages