Há nohup, existe um comando nousr1?

12

Vários dos meus programas regulares travam (regularmente) com a mensagem "User defined signal 1". Eu sei que existe um comando nohup , mas existe um comando nousr1 ? Ou algo que fará algo como nohup mas com USR1?

    
por user2624632 05.08.2014 / 04:56

3 respostas

3

Uma solução hacky simples para ter o utilitário como nohup , mas para SIGUSR1 , seria obter uma cópia de coreutils source, descompacte, faça

sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c

, opcionalmente, também altera o nome do arquivo de saída

sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c

, compile esta fonte e instale o binário nohup recém-compilado em /usr/bin/nousr1 :

cp /path/to/coreutils/src/nohup /usr/bin/nousr1

Depois disso, conforme eu verifiquei, sleep 1000 sai em USR1 , enquanto nousr1 sleep 1000 está imune a esse sinal.

    
por 05.08.2014 / 14:05
8

Como sobre o shell trap comando embutido?

trap 'echo "Thou shalt not USR1 me"' USR1 
    
por 05.08.2014 / 08:12
2

Você precisa usar o formulário do comando trap com um argumento em branco. Tente isto:

trap '' SIGUSR1; myprogram

Isto irá ignorar o sinal SIGUSR1 que é o que você está tentando fazer. Embora eu concorde com os comentadores de que provavelmente há mais coisas acontecendo aqui do que se vê.

A forma incorreta:

trap 'echo ...' SIGUSR1; myprogram

ainda permitirá que myprogram receba o SIGUSR1, mas o shell executará o echo do comando trap .

    
por 10.08.2014 / 01:51

Tags