maoinu
@maoinu (sato mao)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【RaspberryPi/python3】udpをlistenするプログラムが終了できない?(ポートlistenしているのを解放できない?)

解決したいこと

udp通信をしているプログラムを止めたいのですが、どうしたらいいかわからない。
(単にkillの使い方をわかっていないだけなのかもしれないし、正常終了の仕方を知らないだけなのかもしれないので、誰か教えてください。。。)

発生している問題・エラー

以下のように一度は正常に動いて、通信相手のマイコンから「A」という信号を一秒に一回受け取っています。
ここは正常だと思います。

が、二回目からはできないです
おそらく、すでに8888ポートを使っているプログラムが終了できていないという事なのでしょうけど、Linuxはアプリのユーザーとしてしか使ってこなかったので、お手続きを、どうしたらいいのかがわかりません。

pi@hogehoge:~ $ nc -4lu 192.168.11.5 8888
AAAAAAAA^Z
[1]+  停止                  nc -4lu 192.168.11.5 8888
pi@hogehoge:~ $ nc -4lu 192.168.11.5 8888
[2]+  停止                  nc -4lu 192.168.11.5 8888
pi@hogehoge:~ $ exit
exit
停止しているジョブがあります。
pi@hogehoge:~ $ 

同じことはpythonでも起こっていてudpをlistenするpythonプログラムをctrl+zで停止させると、1回目は動きますが、そのあとは以下のようなメッセージが出てしまいます。
(0が出ているのは、「何も受信していない」受信状況を示すモニター用の表現でして、正しいです)

pi@hogehoge:~ $ python3 picar-udp-control_grobal.py
0
0
0
0
^Z
[3]+  停止                  python3 picar-udp-control_grobal.py
pi@hogehoge:~ $ python3 picar-udp-control_grobal.py
Traceback (most recent call last):
  File "picar-udp-control_grobal.py", line 303, in <module>
    sock.bind((UDP_IP, UDP_PORT))
OSError: [Errno 98] Address already in use
pi@hogehoge:~ $ 


※ユーザー名とコンピュータ名は捏造です。

0

1Answer

Linux での CTRL+Z はプロセスの一時停止で、プログラムは終了していない状況で、ポートをオープンしたままです。
CTRL+Z で 一時停止したプロセスは fgコマンド や %コマンド の実行で再開できます。
プロセスを強制終了させたい場合は CTRL+C でkillしてください。

1Like

Comments

  1. @maoinu

    Questioner

    ありがとうございました。
    実際、おっしゃる通りの動作となりました。

    あまり他人の役に立たない質問をしてしまったようです。失礼しました。

Your answer might help someone💌