タグ付けされた質問 「signals」

シグナルは、実行中のプロセスに送信できるメッセージです。シグナルは、プログラム、ユーザー、または管理者が開始できます。

4
セグメンテーションフォールトは内部でどのように機能しますか?
「CPUのMMUが信号を送信する」と「カーネルが問題のあるプログラムにそれを送り、それを終了する」以外に、これに関する情報を見つけることができないようです。 私はそれがおそらくシグナルをシェルに送信し、シェルが問題のあるプロセスを終了して印刷することによってそれを処理すると仮定しました"Segmentation fault"。そのため、crsh(crap shell)と呼ばれる非常に最小限のシェルを作成して、この仮定をテストしました。このシェルは、ユーザー入力を取得してsystem()メソッドに渡すこと以外は何もしません。 #include <stdio.h> #include <stdlib.h> int main(){ char cmdbuf[1000]; while (1){ printf("Crap Shell> "); fgets(cmdbuf, 1000, stdin); system(cmdbuf); } } そこで、私はこのシェルを裸の端末でbash実行しました(下で実行せずに)。次に、セグメンテーション違反を生成するプログラムを実行しました。私の仮定が正しければ、これはa)クラッシュcrsh、xtermのクローズ、b)印刷しない"Segmentation fault"、またはc)両方のいずれかです。 braden@system ~/code/crsh/ $ xterm -e ./crsh Crap Shell> ./segfault Segmentation fault Crap Shell> [still running] 正方形に戻って、私は推測する。これを行うのはシェルではなく、その下のシステムであることを示しました。「セグメンテーション違反」はどのように印刷されますか?「誰」がやっているの?カーネル?他に何か?信号とそのすべての副作用は、ハードウェアからプログラムの最終的な終了までどのように伝播しますか?

4
SIGTERMをBashの子に転送する
次のようなBashスクリプトがあります。 #!/bin/bash echo "Doing some initial work...."; /bin/start/main/server --nodaemon これで、スクリプトを実行しているbashシェルがSIGTERMシグナルを受信した場合、実行中のサーバーにSIGTERMも送信する必要があります(ブロックされるため、トラップは不可能です)。それは可能ですか?
86 bash  shell  signals  docker 

2
標準入力の終了を通知する方法
Bashでは、終了ドキュメントはここのドキュメントで変更できることを学びました。しかし、デフォルトでは標準入力の終了をどのように通知できますか? catとchardetを使用すると、Ctrl + dで標準入力が終了したことを示すことができます。しかし、Ctrl + dとCtrl + cは実行中のコマンドの実行を終了することに似ていることを覚えているようです。だから私は間違っていますか?


3
「トラップ…INT TERM EXIT」は本当に必要ですか?
クリーンアップタスクにtrap使用する多くの例trap ... INT TERM EXIT。しかし、3つのsigspecをすべてリストすることは本当に必要ですか? マニュアルによると: SIGNAL_SPECがEXIT(0)の場合、シェルの終了時にARGが実行されます。 スクリプトが正常に終了したか、または受信したSIGINTか終了したかに関係なく適用されると信じていますSIGTERM。また、実験は私の信念を確認します: $ cat ./trap-exit #!/bin/bash trap 'echo TRAP' EXIT sleep 3 $ ./trap-exit & sleep 1; kill -INT %1 [1] 759 TRAP [1]+ Interrupt ./trap-exit $ ./trap-exit & sleep 1; kill -TERM %1 [1] 773 TRAP [1]+ Terminated ./trap-exit では、なぜそんなに多くの例がすべてをリストしているのINT TERM EXITでしょうか?または、私は何かをEXIT見逃しましたか?足裏が見逃す場合がありますか?
63 bash  shell  signals  trap 

5
親プロセスに送信されたときにSIGINTが子プロセスに伝播されないのはなぜですか?
シェルプロセス(例sh)とその子プロセス(例cat)が与えられた場合、シェルのプロセスIDを使用してCtrl+ の動作をどのようにシミュレートできCますか? これは私が試したものです: 実行shしてからcat: [user@host ~]$ sh sh-4.3$ cat test test 送信SIGINTにcat別の端末から: [user@host ~]$ kill -SIGINT $PID_OF_CAT cat 信号を受信して​​終了しました(予想どおり)。 親プロセスにシグナルを送信しても機能しないようです。親プロセスに送信されたcatときに信号が伝播されないのはなぜshですか? これは動作しません: [user@host ~]$ kill -SIGINT $PID_OF_SH
62 shell  process  signals 


4
プロセスが終了したときのデフォルトの終了コード?
SIGINTまたはのようなハンドル可能なシグナルでプロセスが強制終了されたSIGTERMが、シグナルを処理しない場合、プロセスの終了コードはどうなりますか? 次のようなハンドルできない信号はSIGKILLどうですか? 私が知ることができることから、SIGINTおそらくプロセスを終了すると終了コード130が発生しますが、それはカーネルまたはシェルの実装によって異なりますか? $ cat myScript #!/bin/bash sleep 5 $ ./myScript <ctrl-c here> $ echo $? 130 他の信号をテストする方法がわかりません... $ ./myScript & $ killall myScript $ echo $? 0 # duh, that's the exit code of killall $ killall -9 myScript $ echo $? 0 # same problem

7
シェルスクリプトでのタイムアウト
私が持っているシェルスクリプトだ標準入力からの読み込みを。まれに、入力の準備ができている人がいないため、スクリプトがタイムアウトする必要があります。タイムアウトの場合、スクリプトは何らかのクリーンアップコードを実行する必要があります。それを行う最良の方法は何ですか? このスクリプトは、Cコンパイラを使用しない20世紀のUNIXシステムやbusyboxを実行する組み込みデバイスなど、非常に移植性が高い必要があります。そのため、Perl、bash、コンパイル済み言語、およびPOSIX.2全体にさえ依存できません。特に、$PPID、read -t、完全にPOSIX準拠のトラップは使用できません。一時ファイルへの書き込みも除外されます。すべてのファイルシステムが読み取り専用でマウントされている場合でも、スクリプトが実行される場合があります。 物事をさらに難しくするために、タイムアウトにならないときにスクリプトを適度に高速にすることも必要です。特に、forkとexecが特に低いWindows(主にCygwin)でスクリプトを使用するため、使用を最小限に抑えたいと思います。 一言で言えば、私は持っています trap cleanup 1 2 3 15 foo=`cat` タイムアウトを追加したいです。私は置き換えることはできませんcatでread内蔵しています。タイムアウトの場合、cleanup関数を実行したいです。 背景:このスクリプトは、いくつかの8ビット文字を出力し、前後のカーソル位置を比較することにより、端末のエンコーディングを推測しています。スクリプトの最初は、stdoutがサポートされている端末に接続されていることをテストしますが、環境が嘘をついている場合があります(たとえば、で呼び出されてもplink設定されますTERM=xtermTERM=dumb)。スクリプトの関連部分は次のようになります。 text='Éé' # UTF-8; shows up as Ãé on a latin1 terminal csi='␛['; dsr_cpr="${csi}6n"; dsr_ok="${csi}5n" # ␛ is an escape character stty_save=`stty -g` cleanup () { stty "$stty_save"; } trap 'cleanup; exit 120' 0 1 2 3 …
53 shell  signals  timeout 

9
無限ループの終了
コマンドが終了するたびに自動的に再実行したいので、次のようなコマンドを実行しました。 while [ 1 ]; do COMMAND; done; しかし、私はループを止めることができないならばCtrl-cそれはちょうど殺すようCOMMANDループ全体をしていません。 同様のことをどのようにして達成できますか?端末を閉じることなく停止できますか?
52 bash  signals 

9
Ctrl + Cでbashスクリプトを停止できません
日付を出力してリモートマシンにpingするためのループを備えた単純なbashスクリプトを作成しました。 #!/bin/bash while true; do # *** DATE: Thu Sep 17 10:17:50 CEST 2015 *** echo -e "\n*** DATE:" `date` " ***"; echo "********************************************" ping -c5 $1; done ターミナルから実行すると、で停止できませんCtrl+C。^Cターミナルに送信するようですが、スクリプトは停止しません。 MacAir:~ tomas$ ping-tester.bash www.google.com *** DATE: Thu Sep 17 23:58:42 CEST 2015 *** ******************************************** PING www.google.com (216.58.211.228): 56 data bytes 64 …
42 bash  terminal  signals 


4
非rootユーザーがrootユーザーのプロセスにシグナルを送信するとどうなりますか?
UNIXシグナルのセキュリティについて疑問に思っています。 SIGKILLプロセスを強制終了します。では、非rootユーザーのプロセスがrootユーザーのプロセスにシグナルを送信するとどうなりますか?プロセスはまだシグナルハンドラを実行しますか? 私は受け入れられた答え(ゴラム)に従い、タイプしますman capabilites、そして、Linuxカーネルに関する多くのことを見つけます。からman capabilities: NAME capabilities - overview of Linux capabilities DESCRIPTION For the purpose of performing permission checks, traditional UNIX implementations distinguish two categories of processes: privileged processes (whose effective user ID is 0, referred to as superuser or root), and unprivileged processes (whose effective UID is nonzero). …
33 security  signals 

1
暴力性の低いキル信号-HUP(1)-INT(2)と-TERM(15)の違い
最も暴力的なkill -9(SIGKILL)を別にすれば、他の3つの一般的なシグナル(ここ)-HUP(1)、-INT(2)、および-TERM(15)の違いはよくわかりません。 どちらのシナリオで機能し、他のシナリオは機能しませんか? 一般的に-9(-KILL)が失敗するのはいつですか? 私には、彼らが終了するために、プロセスを頼むように見える優雅に、保存せずに。厳しさを評価すると、私は入れ-HUP < -TERM < -INT < -KILLます。
32 kill  signals 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.