Como passar o SIGALRM para um programa que termina a execução em milissegundos?

0

Eu tenho um programa C que calcula os primeiros n números primos se n é passado como um argumento.

$ ./prime 5
2
3
5
7
11

A lógica do programa me permite entrar em uma função desejada se eu puder dar SIGALRM ao processo do programa.

Então basicamente eu tenho que entrar

kill -14 <PID of prime>

em outro terminal quando 'prime' apenas inicia a execução, antes de entrar no loop para encontrar números primos. É também de notar que o PID muda sempre que o programa é executado.

Como posso concatenar todas essas ações e executá-las em um único comando de linha?

    
por hax 13.10.2016 / 01:57

2 respostas

2

Crie um script de shell curto:

#!/bin/sh
./prime 5 &
sleep 0.001
kill -14 $!

Você pode experimentar ajustar o valor à direita do comando sleep ou se livrar dele completamente.

Observe também que, especialmente em um sistema multiusuário ocupado, você não tem como garantir que o processo realmente receberá o sinal.

Editar : emprestou a ideia de $! da resposta do murus

    
por sмurf 13.10.2016 / 02:19
1

O PID do último processo em segundo plano pode ser obtido usando a variável especial $! . Então:

./prime 5 & kill -ALARM $!
    
por muru 13.10.2016 / 04:35