2016-12-27 10 views
0

Я кодирую в c и хотел узнать через кодирование, что лучше всего узнать, если сигнал (например, SIGUSR1) завершил процесс. Есть ли способ сделать это с помощью функции и обозначить ее так, чтобы другие процессы могли ее знать?Лучший способ узнать, был ли SIGUSR1 отправлен процессу

Подробнее: Процесс программа, которую я сделал в C. Позже, когда процесс заканчивается (с сигналом или нет), я хотел другую программу, я должен знать это. Они связаны через филос.

+0

Возможные контратип http://stackoverflow.com/questions/7696925/send-signal-to-process –

+0

хорошо, я спросил его неправильно , Уже зафиксировано это –

+0

'SIGUSR1' не обязательно завершает процесс, поэтому вы можете _catch_ этот сигнал, записать в файл сообщение с сообщением о том, что этот сигнал был получен, а затем выключить программу. – ForceBru

ответ

1

В родительском процессе вы можете использовать макрос wait() системного вызова, чтобы проверить, завершился ли дочерний процесс сигналом.

Также вы можете получить номер сигнала, используя макрос WTERMSIG(status).

Вот код, демонстрирующий идею.

#include<stdio.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<sys/types.h> 
#include<sys/wait.h> 

int main() 
{ 
    pid_t n = fork(); 
    if(n==0) 
    { 
     execvp(/*Some program here for child*/); 
    } 

    //parent does something 

    //Parent waits for child to exit. 
    int status; 
    pid_t childpid = wait(&status); 

    if(WIFSIGNALED(status)) 
     printf("Parent: My child was exited by the signal number %d\n",WTERMSIG(status)); 
    else 
     printf("Parent: My child exited normally\n"): 

    return 0; 
} 

Вы можете прочитать об этом в руководстве: man 2 wait

+0

Проблема в том, что другой процесс связан через fifo. Это не ребенок. –

+0

@David Coelho. Тогда нет предопределенного способа. Вы должны сами разработать механизм. Например: вы можете поймать сигнал SIGUSR1. Отправьте сигнал другому процессу, прежде чем выйти из первого процесса. Второй процесс также захватывает сигнал и знает, что 1-й процесс вышел. – Raman

+0

Я вижу. Я дам ему попробовать. Спасибо за поддержку :) –

 Смежные вопросы

  • Нет связанных вопросов^_^