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

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

3
サービスとしてのApacheの起動はSIGWINCHで終了します
実行するservice apache startと、ログファイルに次のエントリが表示されます。 [mpm_event:notice] [pid 1906:tid XXX] AH00489: Apache/2.4.23 (Unix) OpenSSL/1.0.2g PHP/7.0.9 configured -- resuming normal operations [core:notice] [pid 1906:tid XXX] AH00094: Command line: '/usr/sbin/httpd' [mpm_event:notice] [pid 1906:tid XXX] AH00492: caught SIGWINCH, shutting down gracefully そしてサービスapacheが開始されませんか?インターネットでSIGWINCH[ Window size change]の意味を見つけることができますが、この場合はあまり役に立ちません。 ファイル/etc/systemd/system/apache.service: [Unit] Description=The Apache Webserver [FaF Compiled] After=network.target nss-lookup.target time-sync.target Before=getty@tty1.service …

2
ゾンビが子供を待っているのはなぜですか?
私はさまざまな情報源を掘り下げていますが、子刈りの解剖学についての適切な説明が見つかりません。これは私が理解したいことの単純なケースです。 $ cat <( sleep 100 & wait ) & [1] 14247 $ ps ax -O pgid | grep $$ 12126 12126 S pts/17 00:00:00 bash 14248 12126 S pts/17 00:00:00 bash 14249 12126 S pts/17 00:00:00 sleep 100 14251 14250 S pts/17 00:00:00 grep --color=auto 12126 $ kill -2 …

2
ssh -t上のstderr
これは出力をSTDERRに送信しますが、Ctrl+を伝搬しませんC(つまり、Ctrl+ Cはkillしますsshがリモートはしませんsleep)。 $ ssh localhost 'sleep 100;echo foo ">&2"' これはCtrl+を伝播しますC(つまり、Ctrl+ Cとsshリモートsleepを強制終了します)が、STDERRをSTDOUTに送信します。 $ ssh -tt localhost 'sleep 100;echo foo ">&2"' Ctrl+を伝播させながら、2番目に強制的にSTDERR出力をSTDERRに送信させるにはどうすればよいCですか? バックグラウンド GNU ParallelはCtrl+ を伝播するために「ssh -tt」を使用しますC。これにより、リモートで実行中のジョブを強制終了できます。ただし、STDERRに送信されたデータは、受信側のSTDERRに送信され続ける必要があります。

4
キーストロークでBashスクリプトから呼び出されたタイムアウトを強制終了できないのはなぜですか?
[編集:これは、生成されたすべてのプロセスを強制終了する方法を尋ねる他のいくつかの質問に似ています。答えはすべてpkillを使用することのようです。したがって、私の質問の核心は次のようになるかもしれません。スクリプトによって生成されたすべてのプロセスにCtrl-C / Zを伝播する方法はありますか?] coreutils(ここで説明)からrecのtimeoutコマンドでSoX を呼び出す場合、Bashスクリプト内から呼び出された後、キーストロークでSoX を強制終了する方法はないようです。 例: timeout 10 rec test.wav ... bashからCtrl+ CまたはCtrl+を使用Zして強制終了できますが、スクリプト内から呼び出された場合は強制終了できません。 timeout 10 ping nowhere ...で殺さすることができますCtrl+ CまたはCtrl+ Zのbashから、としてCtrl+ Zそれは、スクリプト内から実行していますとき。 プロセスIDを見つけてそのように強制終了することはできますが、標準のブレークキーストロークを使用できないのはなぜですか。そして、私ができるようにスクリプトを構成する方法はありますか?

2
ユーザー定義信号が2つしかないのはなぜですか?
Linuxシステムで定義されている信号のリストには、ユーザー定義信号(SIGUSR1およびSIGUSR2)として記述されている2つの信号があります。その他のシグナルは特定の状況で発生またはキャッチされますが、SIGUSRはユーザーアプリケーションの使用に残されます。 では、なぜ2つの信号だけなのでしょうか。
11 history  signals  ipc 

2
BashスクリプトでSIGHUPが表示されませんか?
次のスクリプトがあります。 #!/bin/bash echo "We are $$" trap "echo HUP" SIGHUP cat # wait indefinitely SIGHUP(を使用してkill -HUP pid)送信しても何も起こりません。 スクリプトを少し変更すると: #!/bin/bash echo "We are $$" trap "kill -- -$BASHPID" EXIT # add this trap "echo HUP" SIGHUP cat # wait indefinitely ...スクリプトがecho HUP終了すると、(Ctrl + Cを押すと)スクリプトが正しく動作します。 roger@roger-pc:~ $ ./hupper.sh We are 6233 ^CHUP …
11 bash  signals 

1
SIGINTまたはSIGTERMが子プロセスではなく親スクリプト自体に送信されるときにコマンドまたは関数を実行する
私がこれを持っているとしましょう script.sh #!/bin/bash exit_script() { echo "Printing something special!" echo "Maybe executing other commands!" kill -- -$$ # Sends SIGTERM to child/sub processes } echo "Some other text" #other commands here sleep infinity 受け取ったときにscript.sh関数を実行したいまたは 例:exit_scriptSIGINTSIGTERM killall script.sh # it will send SIGTERM to my script スクリプトでこれを実行したい exit_script() { echo "Printing …

2
一時停止後、whileループが停止するのはなぜですか?
bashを使用してwhileループを一時停止すると、ループが再開後に停止するのはなぜですか?以下の短い例。 $ while true; do echo .; sleep 1; done . . ^Z [1]+ Stopped sleep 1 $ fg sleep 1 $ 私はシグナルに精通しており、これはここではbashの自然な動作であると推測していますが、この特定の方法で動作する理由をよりよく理解したいと思います。

1
ログアウト時にSIGHUPがジョブに送信されないのはどの場合ですか?
実行していると主張したユーザーからの回答を読んだ foo 2>&1 >& output.log & fooログアウトした場合でも、実行が継続されます。このユーザーによると、これはSSH接続でも機能しました。 SSHから切断したり、TTYを終了したりすると、シェルとそのプロセスがSIGHUPを受信して​​終了するという印象を受けたので、本当に信じていませんでした。これは、私の仮定の下で、使用するための唯一の理由だったnohupような場合に、またはtmux、screenら。 次に、glibcのマニュアルを調べました。 このシグナルは、端末の制御プロセスの終了を、そのセッションに関連付けられたジョブに報告するためにも使用されます。この終了により、セッション内のすべてのプロセスが制御端末から効果的に切断されます。 これは私の考えを裏付けるようです。しかしさらに見ると、それは言う: プロセスが制御端末を持つセッションリーダーである場合、SIGHUP信号がフォアグラウンドジョブの各プロセスに送信され、制御端末はそのセッションから切り離されます。 では、これはバックグラウンドで実行されたジョブがSIGHUPを受け取らないことを意味しますか? さらに混乱して、対話型のZshセッションを実行しyes >& /dev/null &、をexit実行して入力しexitました。Zshがジョブを実行していることを警告し、もう一度入力した後、1つのジョブをSIGHUPしたことを通知しました。Bashでまったく同じことを行うと、ジョブが実行されたままになります…
10 ssh  tty  signals 

1
孤立したプロセスグループでインタラクティブシェルは何をすべきですか?
(/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-groupsの提案に従ってUNIXに再投稿する) 簡単な質問は、ttyを所有していない孤立したプロセスグループ内にある場合、シェルは何をすべきかということです。しかし、面白いので、長い質問を読むことをお勧めします。 以下は、お気に入りのシェルを使用して、ラップトップをポータブルスペースヒーターに変える楽しくてエキサイティングな方法です(tcshの変人の1人でない限り)。 #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } これにより、bashはCPUを100%に固定します。zshとfishは同じことをしますが、kshとtcshはジョブ制御について何かをつぶやいてからキールします。これは少し優れていますが、それほど多くはありません。ああ、それはプラットフォームにとらわれない犯罪者です。OSXとLinuxの両方が影響を受けます。 私の(潜在的に間違っている)説明は次のとおりです:子シェルがそれがフォアグラウンドにないことを検出しました:tcgetpgrp(0) != getpgrp()。したがって、それ自体を停止しようとしますkillpg(getpgrp(), SIGTTIN)。しかし、その親(Cプログラム)がリーダーで死亡したため、そのプロセスグループは孤立SIGTTINしています。孤立したプロセスグループに送信されたものは削除されるだけです(それ以外の場合は、再び起動できません)。したがって、子シェルは停止されませんが、まだバックグラウンドにあるので、すぐにすべてが再び実行されます。すすぎ、繰り返します。 私の質問は、コマンドラインシェルがこのシナリオをどのように検出できるか、そしてそれを行うための正しいことは何ですか?私には2つの解決策がありますが、どちらも理想的ではありません。 pidがグループIDと一致するプロセスにシグナルを送ろうとします。それがで失敗する場合ESRCH、それはおそらく孤立していることを意味します。 から1バイトのノンブロッキング読み取りを試みます/dev/tty。それがで失敗する場合EIO、それはおそらく孤立していることを意味します。 (これを追跡する私たちの問題はhttps://github.com/fish-shell/fish-shell/issues/422です) あなたの考えをありがとう!

2
139(セグメンテーション違反)を返すプログラムをbashでトラップするにはどうすればよいですか?
一部のプログラムをテストするbashスクリプトがあり、そのプログラムの1つが返されるSegmentation faultため、スクリプトの先頭にトラップを追加しようとしました。 trap "echo 'segfault occured!'" SIGSEGV しかし、それは何もしませんでした。使った echo $? segfaultを生成するプログラムの直後に、出力として139が表示されます。特定のエラーコードのトラップを追加するにはどうすればよいですか?

2
bashがSIGTERMを無視するのはなぜですか?
時々私はすぐにログアウトしたいときはやりますkill -15 -1。bashがSIGTERMを無視していることに気づきました。 私はそのようなbashの振る舞いの根拠は何ですか? 正当な理由なしにSIGTERMを無視することは、UNIXではありませんよね。 更新: すべてに同じ(無)効果: $ kill -TERM $$ $ type kill kill is a shell builtin $ command kill -TERM $$ $ /bin/kill -TERM $$ UPDATE2: man bashから: bashが対話式の場合、トラップがない場合、SIGTERMは無視されます 故意に行われます。しかし、なぜ?
10 bash  signals 

2
LinuxでゾンビプロセスにSIGKILLを送信するとどうなりますか?
Linuxでは、子プロセスが終了し、その親がまだその上で待機していない場合、ゾンビプロセスになります。子の終了コードはpid記述子に格納されます。 a SIGKILLが子に送信された場合、何の影響もありません。 これは、終了コードがによって変更されない、SIGKILLまたは終了コードが変更されて、子がSIGKILL?

2
Ctrl + Cで、現在のコマンドを強制終了しますが、スクリプトの実行は続行します
私はライン、いつかのために睡眠してから実行して前記Iは、bashスクリプトを持ってtail -f、特定のパターンが見られていることを確認するために私のログファイルを、私はCtrl + Cを押してから抜け出すために、tail -fその後、bashスクリプトの終了の実行までに次の行に移動します: これが私がこれまでに行ったことです: #!/bin/bash # capture the hostname host_name=`hostname -f` # method that runs tail -f on log_file.log and looks for pattern and passes control to next line on 'ctrl+c' echo "===================================================" echo "On $host_name: running some command" some command here echo "On $host_name: sleeping for 5s" …
10 bash  shell  signals  trap 

3
親プロセスへのSIGINTの伝播の防止
子シェルスクリプトの実行中にControl + C(またはINTR文字に設定されている文字)を押すと、親プログラム(C ++プログラムまたはシェルスクリプト)が子シェルスクリプトを実行するシナリオを考えます。 SIGINTは、フォアグラウンドプロセスグループのすべてのプロセスに送信されます。これには、親プロセスが含まれます。 出典:POSIX.1-2008 XBDセクション11.1.9 このデフォルトの動作をオーバーライドする方法はありますか?子プロセスだけが親に伝播せずに信号を処理することですか? 参照:スタックオーバーフローポスト-子が中断されたときに親プロセスが完了しない(TRAP INT)

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