запуск и остановка команды оболочки linux из программы c без блокировки текущего выполнения [решено] - PullRequest
0 голосов
/ 02 мая 2020
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 Ответ

0 голосов
/ 02 мая 2020

вам нужно создать новый процесс с помощью 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 , после чего вы можете отправить вновь созданного дочернего элемента для запуска другого кода (без ожидания или блокировки текущей оболочки). Это делается с помощью семейства системных вызовов exe c exec_family_man_pages

...