Significado e uso de / proc / [pid] / make-if-fail

4

Atualmente, estou desenvolvendo dentro de um ambiente Linux embarcado (kernel 3.10.0) e, enquanto brincava na montagem procfs do sistema, descobri que todos os processos apresentam o seguinte arquivo na pasta /proc/[pid] :

-rw-r--r--   1 root    root      0 Feb   22 09:10 make-it-fail

Apenas para teste, iniciei a partir do shell sleep 360 & e tentei ler / gravar com o arquivo cat e echo the make-if-fail . Estes são os resultados:

# stat /proc/[sleep_pid]/make-it-fail
    File: /proc/[sleep_pid]/make-it-fail
    Size: 0    Blocks: 0    IO Block: 1024   regular empty file
    [...]
# cat /proc/[sleep_pid]/make-it-fail
0
# echo "1" > /proc/[sleep_pid]/make-it-fail
# cat /proc/[sleep_pid]/make-it-fail
1
# stat /proc/[sleep_pid]/make-it-fail
    File: /proc/[sleep_pid]/make-it-fail
    Size: 0    Blocks: 0    IO Block: 1024   regular empty file
    [...]

Coisas estranhas:

  1. Embora stat afirme que o arquivo tem tamanho 0, eu consegui ler e escrever algo lá e recuperar o que escrevi.
  2. O processo está vivo e funcionando, "sobrevivendo" as leituras e escritas deste arquivo. Eu realmente esperava que ... bem, falhasse ou saísse.

Eu entendo que procfs é um pseudo sistema de arquivos (portanto, stat resultados podem não ser "reais" / enganosos) e que ele interage com as estruturas do kernel, mas sinto que estou perdendo alguma coisa aqui agora. p>

Então, qual é o propósito e o uso desse arquivo? Não me lembro de ter visto em outras distros (por exemplo, não é no Ubuntu que eu uso para desenvolvimento)

    
por dave_alcarin 22.02.2016 / 09:38

1 resposta

4

Eu estava investigando um pouco suas dúvidas, pois estava ficando suspeito de ler esta Injeção falhas no kernel que fazem-lo-falha foi um sinalizador.

Na verdade, é confirmado a leitura de Injetando falhas no kernel :

So there are a number of options which can be used to focus the faults on a particular part of the kernel.
These include: task-filter: if this variable is set to a positive value, faults will only be injected when a specially-marked processes are running. To enable this marking, each process has a new flag (make-it-fail) in its /proc directory; setting that value to one will cause faults to be injected into that process.

No final do dia, make-it-fail é um sinalizador booleano que marca se uma operação de injeção condicional para vários processos será feita no PID relacionado. Então, apenas alterando seu valor para 1, como você fez, não terá consequências.

Quanto às variáveis / nomes de arquivos, o artigo também aponta que o kernel deve ser compilado com a capacidade de injeção de falhas ativada; daí você não os vê em outras máquinas Linux normalmente.

Quanto ao proc com as inconsistências do sistema de arquivos, proc é um nome de arquivo de mapeamento do sistema de arquivos virtual para estruturas / variáveis internas do Linux; e é natural que um arquivo tenha tamanho 0 bytes.

Da TLDP Hierarquia do sistema de arquivos do Linux: / proc

The most distinctive thing about files in this directory is the fact that all of them have a file size of 0, with the exception of kcore, mtrr and self.

    
por 22.02.2016 / 13:16