プロセスをきれいに終了

プロセスをきれいに終了

Linux Ubuntuプラットフォームに自動的にプロセスを開始および終了させる必要があります。たとえば、時間が午前8時の場合はプロセスが開始され、時間が午後7時の場合はプロセスが終了し、毎日これを行う必要があります。時間間隔が簡単なら大丈夫でしょう。変更。

crontabで単純なコードを使用しようとしています。

28 12 * * * /home/pi/Desktop/start.sh
50 11 * * * pkill led.py

時間を見ずにスクリプトをstart.sh起動して変更しようとしましたが。プログラムを手動で起動して+で終了すると、LEDが消灯します。何が問題なの?なぜプロセスを終了すると同時にLEDを消灯できないのですか?led.pypkill -9 -f led.pyCtrlc

ベストアンサー1

Ctrl+を入力すると、c通常「INT」信号がプロセスに送信されます。 ~からsignal(7):

  Signal     Value     Action   Comment
  ──────────────────────────────────────────────────────────────────────
  ...
  SIGINT        2       Term    Interrupt from keyboard

プロセスは通常、このシグナルのハンドラーをインストールし、シャットダウン前にいくつかのクリーンアップ操作を実行できるようにします。スクリプトが進行する限り、対応するled.pyハンドラがLEDを消すように聞こえます。

デフォルトでは、「TERM」(15)信号がpkill送信されます。kill(また、「KILL」(9)を送信しようとしました。)これらの信号は、led.pyグルーミング機能を実行する機会なしにあまりエレガントな衝突を引き起こします。

きれいにするには、led.py「INT」(2)信号を送信する必要があります。

pkill -2 [process specifier]

pkillcrontab指定した名前が検索中の名前ではないため、コマンドがプロセスを見つけることができない可能性があります。 ~からpkill(1):

-f、--完了

これ模様通常、プロセス名のみが一致します。いつ- F一度設定すると、コマンドライン全体が使用されます。

あなたのスクリプトはled.pyおそらくPythonスクリプトなので、プロセス名は単にpythonpython3または類似)です。コマンドライン全体は似ているpython led.pyため、-fオプションを使用して一致させることができます。

pkill -2 -f led.py

おすすめ記事