
mysql
間接的に呼び出される(長いSQLスクリプトの実行)Perlスクリプトがあります。このスクリプトの実行中にCtrl+を無効にしたいが、Cとにかくシグナルがまだ到着し、mysql
「Ctrl-C - クエリが終了しました。正常に続行してください」と表示されますmysql
。
私は持っています:
- 「IGNORE」に設定してください
$SIG{INT}
。実際、Perlスクリプトは引き続き実行されます。 - Perlスクリプトでプロセスグループを設定する - 実際に私のPerlスクリプトと同じプロセスグループにあるものとして
ps -e -o uid,pid,ppid,pgid,command
マークmysql
mysql
これらの両方が発生した後に呼び出されます。
このシグナルがまだプロセスに到達するのはなぜですか。これが起こらないようmysql
にするにはどうすればよいですか。
答え1
SIG_IGN
次のようなコードを書くとhttps://stackoverflow.com/questions/3232613/how-to-stop-sigint-being-passed-to-subprocess-in-pythontrap
)または次のようにシェルで使用されます。BashでSIG_IGNとSIG_DFLに信号トラップをどのように設定できますか?、私の考えでは、Perlではこれがperlipc
ライブラリであると思います。https://metacpan.org/pod/perlipc、IPCはプロセス間通信
「IGNORE」または「DEFAULT」文字列をハンドラとして指定することもできます。この場合、Perlはシグナルを削除するか、基本操作を実行しようとします。