O que acontece com um arquivo excluído ainda sujeito a redirecionamento no linux?

4

Se um arquivo de log, como nohup.out, for excluído do Linux enquanto ainda estiver sujeito a um trabalho em execução (e mais entradas), o que acontece com os dados?

por exemplo

script.sh

#!/bin/bash
while [ 1 ]
do
  fortune
done

então ...

# nohup ./script.sh &

Isso gera o log como nohup.out por padrão.

Ou até mesmo

# ./script.sh > nohup.out &

A questão é; se nohup.out for excluído, o que acontece? O arquivo foi mesmo assumindo que o trabalho continua? O que acontece se o script.sh gerar dados suficientes para preencher um disco? Isso cria um estado de fato de redirecionamento para / dev / null?

Como plano de fundo, encontrei um processo iniciado anteriormente nesse método que não pode ser reiniciado por um longo período, mas antes da janela de manutenção, é minha estimativa que o disco seja preenchido. A situação será evitada no futuro, estou apenas curioso para saber o que acontece com um arquivo desvinculado ainda sujeito a redirecionamento.

    
por Antitribu 14.10.2009 / 13:31

1 resposta

8

Se um programa ainda tiver um identificador de arquivo aberto, o que acredito que acontecerá é que o arquivo continua a existir. Ele desaparece de suas listagens de diretório e desaparece, mas até que o último identificador de arquivos seja fechado, o arquivo continua a crescer.

É por isso que as pessoas terão arquivos enormes no sistema de arquivos e obterão erros, encontrarão um arquivo errante que seja enorme, apaguem-no e ainda terão enormes listas de espaço em disco, mas não poderão mais localizar o arquivo. Está lá. Apenas não é bem visível. Use lsof para encontrar o aplicativo que contém o identificador de arquivo e matar / fechar o aplicativo e, em seguida, o espaço é recuperado.

    
por 14.10.2009 / 13:41