como retornar ao script subjacente da cauda -f

5

Eu tenho um script ksh , no qual eu uso tail -f para exibir um arquivo de log.

Como posso terminar o processo tail e continuar executando o script subjacente?

Estou executando no AIX 7.1.
---------------------------------------------editar---- -------------------------------
de acordo com a resposta de Gilles, eu tentei isso no meu script:

trap 'echo "tail process terminated!"' 2
tail -f mylog.log
trap - 2

Agora, após o comando tail ser executado, pressione CTRL + C, o processo final foi eliminado e meu script continua a ser executado. Mas o novo problema é, quando eu pressionar CTRL + C novamente, meu script não será encerrado. Qualquer um pode ajudar?

    
por CaiNiaoCoder 21.07.2014 / 10:43

2 respostas

2

O ponto de tail -f é correr para sempre até que seja explicitamente morto, então você terá que tentar matá-lo.

Se houver alguma lógica que determine quando o processo tail deve ser eliminado, obtenha o ID do processo de tail e organize o acionamento de sua eliminação quando desejado. Por exemplo, se você quiser matá-lo depois de um minuto:

tail -f file.log &
tail_pid=$!
sleep 60
kill $tail_pid
do_more_stuff

Se você quiser terminar tail mas não o shell script quando o usuário pressionar Ctrl + C , interceptar o sinal SIGINT . Você precisa definir o trap para uma string não vazia (qualquer valor não vazio fará, mesmo que um espaço), já que uma string vazia faria com que o SIGINT fosse ignorado pelo sub-processo tail , assim como pelo shell de chamada. / p>

trap : INT       # set a signal handler for SIGINT that does nothing
tail -f file.log
do_more_stuff    # executed when tail is killed, e.g. by the user pressing Ctrl+C
trap - INT       # reset SIGINT to killing the script
    
por 22.07.2014 / 01:38
4

Se você não colocar em segundo plano o comando tail em seu script, o shell esperará que ele saia, o que nunca acontecerá.

Se você tiver outro trabalho a fazer, após o qual você quer matar o comando tail , você pode

tail -f logfile &
tailpid=$!
...do some other stuff...
kill $tailpid
...carry on...
    
por 21.07.2014 / 10:49

Tags