nohupがありますが、nousr1コマンドはありますか?


12

私の定期的なプログラムのいくつかは、メッセージ「ユーザー定義信号1」でクラッシュします(定期的に)。nohupコマンドがあることは知っていますが、コマンドはありnousr1ますか?またはnohup、USR1のようなものを実行するものですか?


3
より良い質問は、そもそも何をusr1シグナルに送信しているのでしょうか?何もない場合、終了メッセージは単に誤解を招く可能性があります。
グラント14

2
「通常のプログラム」で深刻な問題が発生しているように聞こえますが、単に信号を無効にすると、基になるアプリケーションが正しく機能しないか、正しく機能しない場合があります。単に無効にする前に、環境を注意深く調べることを強くお勧めします。
mdpc 14

@Grant:同意します。これらの信号を送信しているものを教えてくれるユーティリティはありますか?
user2624632 14

回答:


3

に類似したユーティリティを使用するための単純なハッキングソリューションですnohupが、のためにSIGUSR1coreutilsソースのコピーを取得し、それをアンパックして、

sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c

、オプションで出力ファイル名も変更します

sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c

、このソースをコンパイルし、新しくコンパイルされたnohupバイナリをインストールして/usr/bin/nousr1ください:

cp /path/to/coreutils/src/nohup /usr/bin/nousr1

この後、チェックしたように、でsleep 1000終了しますがUSR1nousr1 sleep 1000この信号の影響は受けません。


nohupちなみに、の主な機能は、SIGHUP最初から送信されないように、プロセスを端末から分離することです。また、シグナルハンドラを設定することは追加のボーナスですが、不要なはずです。
サイモンリヒター14

@SimonRichterでsignal(SIGHUP,SIG_IGN);コールを削除するとnohup.c、プロセスはを受け取りますSIGHUPnohupシグナルを無視することとは別に、stdin、stdout、stderr記述子を非終端ファイルとして再度開くだけです。特別な方法でプロセスをターミナルから切り離すことはありません。つまりSIGHUP、端末がハングアップするとプロセスが送信されます。反対側にはbashがあります。これはdisownコマンドで同様のことを行いますが、どのよう実装されているのかわかりません。
ルスラン14

これはうまくいくようです。
user2624632 14

8

シェルのtrap組み込みコマンドはどうですか?

trap 'echo "Thou shalt not USR1 me"' USR1 

良い考えですが、うまくいきませんでした。とにかくプロセスは「ユーザー定義シグナル1」で終了しました。
user2624632 14

シグナルハンドラー(SIG_IGNとSIG_DFL以外)は、子プロセスに継承されません
aecolley

2

trap引数が空白のコマンドの形式を使用する必要があります。これを試して:

trap '' SIGUSR1; myprogram

これはあなたがやろうとしているSIGUSR1シグナルを無視します。コメンターには同意しますが、おそらくここで見ている以上のことが行われています。

間違った形式:

trap 'echo ...' SIGUSR1; myprogram

myprogramSIGUSR1を受信できますが、シェルはコマンドechoから実行しtrapます。


これはうまくいくようです。
user2624632 14

おっと、あまりにも早く話しました。私は走っていましたがtrap '' SIGUSR1; gvimdiff file1 file2、Vimは「Vim:Caught deadly signal USR1」で死亡しました。
user2624632 14

うーんcode.google.com / p / vim / source / browse / src / os_unix.cのソースコードを見ると、VIMがUSR1信号を再度有効にして致命的なエラーとして扱っているようです。OSにUSR1シグナルの配信を拒否させることができれば、あなたの唯一の望みはあるように思えます。その機能を提供できる何かがあるかどうかはわかりません。
エイドリアンプロンク14


Adrian Pronk:Vimだけではありません。Firefox、Aqualung、Thunderbirdなどもあります。しかし、Konsoleのような他のアプリは永久に動作しません。
user2624632 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.