Obtém o PID de criação de arquivo

6

Estou escrevendo um script bash que cria 5 arquivos com a extensão ".P" e escreve uma linha de "algo" neles. "P" representa um número e é o PID do processo que cria o arquivo. Como você pode fazer isso? Estou criando meu arquivo e escrevendo nele assim: echo "something" > file_name

    
por Dragos Rizescu 24.11.2013 / 21:48

2 respostas

7

Se você quiser saber o PID da sessão bash em execução no momento (que pode muito bem ser o que está executando o shell script e mais nada), você pode usar $$ ou ${BASHPID} . Eles são semelhantes, mas sutilmente diferentes; citando a página man do GNU bash 4.2, seção "Variáveis shell":

BASHPID

Expands to the process ID of the current bash process. This differs from $$ under certain circumstances, such as subshells that do not require bash to be re-initialized.

Você também pode encontrar ${PPID} helpful; ele contém o ID do processo pai da atual sessão bash. Se você quiser ir além disso, terá que escrever algum código para percorrer a árvore de processos, e isso certamente dependerá do sistema operacional.

Teste echo "something" > file_name.$$ no seu shell como exemplo. E se você estiver fazendo algo sério, por favor, cite sempre qualquer coisa envolvendo variáveis de ambiente que você não definiu como um valor seguro conhecido.

Se o que você quer é o PID do processo que originalmente criou um arquivo, como indicado no título, duvido que seja possível (embora dependa exatamente de qual SO você está executando) . Apenas não seria uma informação útil para armazenar no caso geral, já que os PIDs são reutilizados, bem como normalmente mais ou menos aleatórios. Em um sistema multiusuário ocupado, para todos os efeitos, será aleatório para qualquer usuário.

    
por 24.11.2013 / 22:02
0

Experimente este script

#!/bin/sh
for i in 'seq 5'
do
    pid_var='grep ^Pid: /proc/self/status | awk '{print $2}''
    echo "something $$" > /tmp/filename$i.$pid_var
done

Sua saída será algo assim:

filename1.1234
filename2.1235
filename3.1236
filename4.1237
filename5.1238
    
por 25.11.2013 / 08:12