A eliminação de um processo fecha todos os arquivos abertos por esse processo?

1

Eu quero matar um processo que tenha uma conexão aberta com um banco de dados. Se eu matar o processo, posso ter certeza de que o banco de dados está desbloqueado?

    
por Alex 02.01.2017 / 22:47

3 respostas

7

"Todos os descritores de arquivos, fluxos de diretórios, descritores de conversão e descritores de catálogo de mensagens abertos no processo de chamada devem ser fechados". Isso é o que o POSIX diz que deve acontecer se um processo estiver saindo devido a um sinal (isto é, "matando-o").

Assim, um cliente, um processo que acessa um servidor, definitivamente fecharia a extremidade de uma conexão de rede. O comportamento de um servidor ("banco de dados") quando um cliente ("seu processo") é eliminado depende do servidor decidir (detectar e agir).

A conexão de rede será definitivamente fechada no lado do cliente, mas o que o servidor faz com a sessão neste caso é difícil de dizer. Se ele tem um bloqueio em uma tabela ou linha em uma tabela, quando deve ser lançado?

O MySQL tem um tempo limite de sessão ociosa após o qual libera os bloqueios mantidos por um cliente que está desaparecendo (consulte esta pergunta do StackOverflow ). Você terá que procurar na documentação do banco de dados específico que você usa para ver o que pode acontecer, mas meu palpite é que haveria algum tipo de temporizador ocioso envolvido na maioria dos casos.

    
por 02.01.2017 / 23:05
1

sim, mas ...

Matar um processo fecha seus arquivos, mas não é incomum que kill em um processo conectado por meio de um soquete ou outra conexão rede (usada com bancos de dados, por exemplo) não seja imediatamente < em> matar o processo. Você verá um processo aguardando para fechar usando ps , por exemplo.

    
por 02.01.2017 / 22:51
0

Geralmente, ele mata todos os arquivos abertos por este processo. No entanto, quando alguns descritores de arquivos são usados em algum lugar, eles não serão fechados com certeza.

    
por 01.02.2018 / 07:59