kill por padrão envia SIGTERM. Isso é tratado pelo manipulador de sinal do processo e o processo pode:
- instala um manipulador de sinal que simplesmente não faz nada
- tem um sinal ignorado
- mascare o sinal (e faça a entrega assim que for desmascarado)
Eu acho que pcmanfm
faz algo assim. Você pode encontrar os dois últimos observando /proc/PID/status
, em SigBlk
e SigIgn
SIGKILL (9), por outro lado, não é tratado pelo próprio processo e não pode ter seu manipulador de sinal alterado, ser ignorado ou ser mascarado.
Tente executar este programa python3 contra o pid de pcmanfn
para ver exatamente o que ele ignora ou bloqueia (precisa do python 3.5):
#!/usr/bin/python3
import os
import sys
import time
import signal
def show(label, value):
ivalue = int(value, 16)
print("%s: %s:"% (label, value.strip()), end=' ')
cnt=1
while ivalue:
if ivalue & 1:
print("%s(%s)" % (signal.Signals(cnt).name, cnt), end=' ')
ivalue>>=1
cnt+=1
print()
if len(sys.argv)==1:
pid=os.getpid()
else:
pid=int(sys.argv[1])
status=open('/proc/%d/status' % (pid,)).readlines()
print("Pid: %d" % (pid,))
for line in status:
what, value = line.split(':', 1)
if what=='SigBlk':
show('Blocked', value)
elif what=='SigIgn':
show('Ignored', value)
Você deve ser capaz de ver se o SIGTERM está lá.