fusion 및 lsof 확인 파일이 사용 중입니다.

fusion 및 lsof 확인 파일이 사용 중입니다.

직렬 포트가 사용 중인 이유를 찾는 방법에 대한 몇 가지 조언을 받았습니다. 특히, gammu-smsd를 시작하려고 하면 포트가 사용 중이라는 메시지가 표시되므로 /dev/ttyS0에서 시작을 거부합니다.

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

나는 두 가지 다른 명령을 사용했습니다. 그들은 모두 다른 프로세스가 유죄임을 발견했습니다. 먼저 퓨저를 사용해 보았습니다.

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

그래서 fusioner는 dropbox가 그것을 사용하고 있다고 말합니다.

그런 다음 lsof를 사용합니다.

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

lsof는 화면(dropbox가 아님)이 이를 사용하고 있음을 의미합니다.

그렇다면 이러한 프로그램(dropbox 또는 screen) 중 실제로 "사용 중인" 리소스로 인해 gammu-smsd 시작을 거부하게 만드는 프로그램은 무엇입니까?

답변1

짧은 대답은 다음과 같습니다 screen.

약간 더 긴 대답은 플래그를 사용하여 모든 것을 나열하도록 -m지시하는 것 입니다.fuser마운트 포인트. 설정에 따라 이는 모두를 의미할 수도 /dev있지만 을 의미할 수도 있습니다 /. 분명히 당신이 원하는 것은 아닙니다. 이렇게 하면 fuser -vm /dev/ttyS0내 시스템에 60줄이 넘는 매우 긴 목록이 표시됩니다.

그것을 제거 -m하면 아마 당신에게 같은 대답을 줄 것입니다 lsof.

답변2

gammu-smsd를 데몬으로 실행하려고 하면 syslog(데몬이 작성한 로그)에 /dev/ttyS0 포트가 현재 열려 있고 사용 중이라고 표시됩니다.

그래서 그것을 사용하는 것이 무엇인지 알아 내기 위해 처음에는 다음을 실행했습니다.

fuser -m -u /dev/ttyS0 

그러나 -m 스위치는 @derobert가 말했듯이 마운트 지점을 사용하여 모든 것을 나열하기 때문에기만적인 응답을 제공합니다.

lsof 명령은 지정된 포트를 사용하여 프로세스를 올바르게 보고합니다.

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

이제 깨끗한 방법으로 Gnu 스크린 세션을 삭제하려고 합니다.

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

세션이 종료되더라도 프로세스는 여전히 존재합니다.

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

그리고:

     $ 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

그래서 프로세스 자체를 종료했습니다.

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

마지막으로 프로세스가 종료됩니다.

이제 감무를 시작합니다.

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

잘 작동합니다.

$ 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

관련 정보