fuser vs lsof para verificar arquivos em uso

fuser vs lsof para verificar arquivos em uso

Tenho recebido algumas sugestões sobre como descobrir por que minha porta serial está ocupada. Especificamente, quando tento iniciar o gammu-smsd, ele se recusa a iniciar em /dev/ttyS0 porque diz que a porta está ocupada:

sudo /etc/init.d/gammu-smsd start
Sep 30 16:16:51 porkypig gammu-smsd[25355]: Starting phone communication...
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Gammu            - 1.26.1 built 21:46:06 Nov 24 2009 using GCC 4.4]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Connection       - "at115200"]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Connection index - 0]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Model type       - ""]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Device           - "/dev/ttyS0"]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Runing on        - Linux, kernel 2.6.32-42-server (#95-Ubuntu SMP Wed Jul 25 16:10:49 UTC 2012)]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [System error     - open in serial_open, 16, "Device or resource busy"]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: Init:GSM_TryGetModel failed with error DEVICEOPENERROR[2]: Error opening device. Unknown, busy or no permissions.
Sep 30 16:16:51 porkypig gammu-smsd[25355]: Can't open device (Error opening device. Unknown, busy or no permissions.:2)
Sep 30 16:16:51 porkypig gammu-smsd[25355]: Using PGSQL service
Sep 30 16:16:51 porkypig gammu-smsd[25355]: Disconnecting from PostgreSQL

Usei dois comandos diferentes. Ambos consideram processos diferentes culpados. Primeiro tento o fusor:

fuser -m -u /dev/ttyS0 
/dev/ttyS0:          21624(guarddoggps)
cd /proc/21624
cat status
Name:   dropbox
State:  S (sleeping)
Tgid:   21624
Pid:    21624
PPid:   1
TracerPid:  0
Uid:    1001    1001    1001    1001
Gid:    1001    1001    1001    1001
FDSize: 64
Groups: 5 27 1001 5004 
VmPeak:   873732 kB
VmSize:   806040 kB
VmLck:         0 kB
VmHWM:    207668 kB
VmRSS:    131864 kB
VmData:   547820 kB
VmStk:       160 kB
VmExe:      3524 kB
VmLib:     29660 kB
VmPTE:      1244 kB
Threads:    21
SigQ:   0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001001000
SigCgt: 00000001800004c8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed:   ff
Cpus_allowed_list:  0-7
Mems_allowed:   00000000,00000001
Mems_allowed_list:  0
voluntary_ctxt_switches:    202
nonvoluntary_ctxt_switches: 1

Então o fusor diz que o dropbox está usando.

Então eu uso lsof:

sudo lsof | grep ttyS0
screen    23520        root    6u      CHR               4,64         0t0       1421 /dev/ttyS0

lsof diz que a tela (em vez do dropbox) está usando-o.

Então, qual desses programas (caixa de depósito ou tela) está realmente fazendo com que o gammu-smsd se recuse a iniciar porque os recursos estão "ocupados"?

Responder1

A resposta curta é: screen.

A resposta um pouco mais longa é que o -msinalizador fuserdiz para listar tudo usando oponto de montagem. Dependendo da sua configuração, isso provavelmente significa tudo /dev, mas também pode ser /. Claramente não é o que você pretendia. Você obterá uma lista muito longa fuser -vm /dev/ttyS0, com mais de 60 linhas em meu sistema.

Tire o -me provavelmente lhe dará a mesma resposta que lsofdeu.

Responder2

Quando tentei executar gammu-smsd como um daemon, meu syslog (no qual o daemon grava) indicou que a porta /dev/ttyS0 estava atualmente aberta e em uso.

Então, para descobrir o que estava sendo usado, inicialmente executei

fuser -m -u /dev/ttyS0 

No entanto, essa opção -m deu uma resposta enganosa porque, como @derobert disse, ela lista tudo usando o ponto de montagem.

Foi o comando lsof que relatou corretamente o processo usando a porta especificada:

sudo lsof | grep ttyS0
screen    23520        root    6u      CHR               4,64         0t0       1421 /dev/ttyS0

Agora tentei excluir a sessão da tela gnu de maneira limpa:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.
screen -S 21200.pts-1.porkypig -X quit

Embora isso encerrasse a sessão, o processo ainda estava ativo:

$ cd /proc/23520
$ head -n 1 status
    screen

e:

     $ ps aux | grep 23520
zsh: correct 'aux' to 'auxv' [nyae]? n
root      5111  0.0  0.0   4348   784 pts/7    S+   16:20   0:00 strace -p 23520
1001      5574  0.0  0.0   7636   920 pts/4    S+   17:51   0:00 grep 23520
root     23520  0.0  0.0  25604  1532 ?        Ss   Sep30   0:00 SCREEN /dev/ttyS0 115200

Então eu matei o processo em si:

# kill 23520
# ps aux | grep 23520
  root      5665  0.0  0.0   7636   916 pts/4    S+   17:54   0:00 grep 23520

E finalmente o processo foi encerrado.

Agora comecei gammu:

sudo /etc/init.d/gammu-smsd start

E está funcionando bem:

$ ps aux | grep gammu-smsd
gammu     6042  0.0  0.0  87776  2652 ?        Ss   18:12   0:00 /usr/bin/gammu-smsd --daemon --user gammu --pid /var/run/gammu-smsd.pid
1001      6069  0.0  0.0   7636   912 pts/4    R+   18:13   0:00 grep gammu-smsd

informação relacionada