Да, это возможно через трубы.
Шаг первый вызов труба , чтобы получить трубу:
#include <unistd.h>
int main(...)
{
int fileDescriptors[2];
pipe(fileDescriptors);
Шаг 2 передает fileDescriptors [0] в основной процесс, а fileDescriptors 1 в поток. В Main вы ожидаете записи канала, читая из fileDescriptors [0]
...
char msg[100];
read(fileDescriptors[0], msg, 100); // block until pipe is read
}
Шаг 3, из вашего потока пишите в fileDescritpors 1 при возникновении сигнала
void signal_handler( int sig )
{
// Write to the file descriptor
if (sig == SIGKILL)
{
const char* msg = "Hello Mama!";
write(fileDescriptors[1], msg, strlen(msg));
}
}