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

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

1
シェルスクリプトがシグナル9で殺されたかどうかを知る方法はありますか
殺され続けるbashスクリプト(javaプログラムから呼び出される)があります。私はいつもsignal 15withをキャッチしますtrapが、それから私が疑う他のシグナルが来signal 9ますが、それが本当にあるかどうかについては基本的に盲目signal 9です。 私はあなたができないことを知っているtrap signal 9のでsignal 9、私のシェルスクリプトを殺すかどうかを知ることができる他の方法はありますか?

1
1つの端末を終了するときに他の端末のbash履歴を更新する
ここで求められているように私は、この質問が曖昧にされていません知って更新し続ける(と重複こちら)。 私が達成しようとしていることは少し異なります。入力するたびlsにプロンプトをファイルに書き換えるという考えが好きではありません(history -a; history -c; history -r)。 終了時にファイルを更新したいと思います。それは簡単です(実際にはデフォルトです)が、書き換える代わりに追加する必要があります: shopt -s histappend ここで、端末が閉じられたときに、更新を認識できるように、開いたままになっている他のすべてのものを作成したいと思います。 入力$PS1するたびにチェックすることなくこれを行うことを好みcommandます。何らかの信号をキャプチャする方が良いと思います。どうしますか?不可能な場合は、おそらく簡単cronjobですか? このパズルをどのように解決できますか?

4
Ctrl-Zとkill -STOPの違いは何ですか?
makeシェルから(大規模なプロジェクトで)コマンドを実行すると、Ctrl-Zを入力してプロセスを停止し、シェルに戻ることができます。その後、fgプロセスを続行するために実行できます。 これを自動化するシェルスクリプトを作成しようとしています(具体的には、CPUの温度を数秒ごとに確認し、コンピューターが過熱しやすいため、高温になった場合はプロセスを停止します)。私の最初の試みは次のように機能しました(簡略化)。 make & subpid="$!" sleep 2 # If the CPU temperature is too high... kill -STOP "$subpid" sleep 2 # If the CPU temperature has dropped to safe levels... kill -CONT "$subpid" wait "$subpid" 残念ながら、これは機能しませんでした。プロセスにSIGSTOPを送信しても、プロセスは一時停止しませんでした(出力を端末に送信し続けることで明らかになりました)。make &コマンドラインで実行し、SIGSTOPを送信し、プロセスの状態をps;で確認しました。停止としてリストされていました(そしてSIGCONTを送信したときに再び開始しました)が、出力を吐き出し、コア温度を上昇させていました!Ctrl-Zで停止してもこの問題は発生しませんでしたが、スクリプトでそれを行う方法はわかりません。 Ctrl-Zとの違いは何kill -STOPですか?シェルスクリプトで前者の動作を取得するにはどうすればよいですか?

6
Telnet送信Ctrl-C
telnetを使用して、トラフィックをRS-232ポートにプロキシするターミナルサーバーに接続します。 残念ながら、一部のデバイスを使用する場合、CTRL+ C文字(0x03)を送信することはできません。キャラクターを送信する代わりに、ローカルクライアントがキーストロークをキャッチしたように思われ、私は「some-other-mode」のままです。私が欲しかったのはキャラクターを送ることだけでした。 これをデバッグするために、私は遊んでいます: ^] toggle termdata そして ^] toggle options 動作しないターミナルサーバーでCTRL+ を押すと、次のようになりCます。 telnet 10.10.129.101 2012 Trying 10.10.129.101... Connected to termserv-val3 (10.10.129.101). Escape character is '^]'. ^] telnet> toggle options Will show option processing. ^] telnet> toggle termdata Will print hexadecimal representation of terminal traffic. SENT IAC IP SENT DO …

4
SIGINTなどをトラップするときに終了コードを保持しますか?
trapたとえばhttp://linuxcommand.org/wss0160.php#trapで説明されているように使用してctrl-c(または類似のもの)をキャッチし、終了する前にクリーンアップすると、返される終了コードが変更されます。 これはおそらく現実の世界では違いはありません(たとえば、終了コードは移植可能ではなく、その上に、プロセスが終了したときのデフォルトの終了コードで説明されているように常に明確であるとは限らないためです)。それでも、本当にそれを防ぎ、代わりに中断されたスクリプトのデフォルトのエラーコードを返す方法はありませんか? 例(bashですが、私の質問はbash固有のものと見なすべきではありません): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now my return code will be 1. ' _ 出力: $ ./test.sh …

2
ssh接続が失われた後、wgetが死ななかったのはなぜですか?
私はssh自分のサーバーにエドと走りwget -r -np zzz.aaa/bbb/ccc、それが仕事を始めました。それから(私の家での)インターネット接続が中断wgetされhup、ssh接続が失われたために端末が死んだためにそれがped されたのではないかと心配しました。しかし、その後ssh、サーバーに実行して、サーバーがまだ実行中で出力を入れてwget.logダウンロードしていることに気付きました。誰かが私にここで何が起こったのか説明してもらえますか? これはps私に与えるものです: PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 32283 0.6 29.4 179824 147088 ? S 14:00 1:53 wget -r -np zzz.aaa/bbb/ccc ?の列での意味(疑問符)はtty?
13 ssh  terminal  wget  signals 

2
zshで完了をキャンセルするが、完了のみ
完了関数に時間がかかる場合は、+ (端末割り込みキー、SIGINTを送信)または+ (にバインド)を押して中断できます。その後、未完成の単語が残ります。CtrlCCtrlGsend-break ただし、完了機能が終了するときにCtrl+ CまたはCtrl+をG押すと、キーを押すとコマンドラインがキャンセルされ、完了をキャンセルする代わりに新しいプロンプトが表示される場合があります。 特定のキーが進行中の完了をキャンセルするようにzshを設定できますが、完了機能がアクティブでない場合は何もしませんか?

1
bashのようにプロセスを中断および再開する方法
この質問はフォローアップです:プロセスを中断および再開する方法 私はgnome-terminalのbashセッションからfirefoxを起動しました。 プロセスツリーは次のようになります。 $ ps -e -o pid,ppid,cmd -H 1828 1 gnome-terminal 26677 1828 bash 27980 26677 /bin/sh /usr/lib/firefox-3.6.15/firefox 27985 27980 /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin 27989 27985 /usr/lib/firefox-3.6.15/firefox-bin 28012 27989 /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true CTRL+Zbashでヒットすると、firefoxが中断されます。コマンドbg(またはfg)を発行すると、firefoxが再開されます。これは予想どおりです。 kill -s SIGTSTP 27980別のターミナルでコマンドを発行する[1]+ Stopped firefoxと、最初のターミナルで行を印刷します(ちょうどヒットしたときのようにCTRL+Z)が、firefoxを中断しません。シェルスクリプトを一時停止するだけだと思います。 kill -s SIGTSTP 27989別の端末でコマンド(PIDに注意)を発行すると、firefoxが中断されます。最初の端末はこれに注意しません。 bashはプロセスツリー全体をどのように一時停止しますか?ツリーとすべての子をSIGTSTPだけトラバースしますか?


3
Ctrl + Cでキャンセルするプロセスを制御する
Linuxで起動し、小さなBashスクリプトを実行するライブCDがあります。スクリプトは、2番目のプログラム(通常はコンパイル済みのC ++バイナリ)を検索して実行します。 Ctrl+ を押すと、2番目のプログラムを中止できますC。何をすべき起こることは、第2のプログラムを停止していることである、とBashスクリプトがクリーンアップを実行し続けます。どのような実際に起こることは、メインアプリケーションとBashスクリプトの両方が終了していることです。これは問題です。 そこで、trap組み込みを使用してBashにSIGINTを無視するように指示しました。そして今Ctrl+ CC ++アプリケーションを終了しますが、Bashは実行を続けます。すごい。 そうそう...時々、「2番目のアプリケーション」は別のBashスクリプトです。そして、中にいる場合、Ctrl+ C今行わない全く何も。 明らかに、このようなものがどのように機能するかについての私の理解は間違っています...ユーザーがCtrl+を押したときにどのプロセスがSIGINTを取得するかを制御するにはどうすればよいCですか?私はこの信号を1つの特定のプロセスに向けたいです。
13 bash  signals 

2
Linuxの「トラス-T」および「トラス-U」と同等ですか?
LinuxでSolarisユーティリティのオプション-Tと-Uオプションと同等の機能はありますか?truss これらは、トレースされたアプリケーションによって呼び出されたときに停止するシステムコール(-T)またはライブラリ関数(-U)を指定することです。 または、別の言い方をすれば、特定のシステム呼び出しまたは特定の共有ライブラリー関数呼び出しを行うとすぐに、トレースされたアプリケーションによって開始されたプロセスを(SIGSTOPによって強制終了されるかのように)停止させたいと思います。 straceおよびltraceLinux上のSolarisの機能セットの多くを提供しtruss、彼らはそれをやっているようには見えません。 例えば: truss -f -T open cmd strace -f cmd実行中のプロセスcmdまたはその子孫のいずれかがopenシステムコールを実行した場合、すぐに停止されることを除きます(そして、都合の良いときに後で再開できます)。 いくつかのケースでは、私が使用できるgdbのをcatch syscall、私は便利なフォークに従うと、すべてのフォークのプロセスのためにそれをやって継続した後もそれをやって続けることができます解決策を探していたexecveの。 私は同じ機能を提供するユーティリティを思い出すようです.1つ(またはその同じユーティリティのオプション)でも、そのようないくつかのsyscallのいくつかの発生の間のシングルステップアプリケーションに、そのようなメモリが私に失敗しています、私も確信できませんそれはLinuxでした。

3
ターミナルエミュレータは、SIGKILLを受信した後、どのようにして子供を殺すことができますか?
私が理解していることから、SIGKILLは捕まえられません。これは、OSがプロセスを破壊する前に、プロセスがその子を殺す時間がないことを意味します。これは、シェルスクリプトで実証できます。 #! /bin/bash trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless. mplayer video.avi SIGKILLで削除すると、mplayerが実行されたままになります。 $ kill -9 $pid しかし、ターミナルエミュレータ(xterm、Terminalなど)を使用すると、子供が一緒に殺されてしまいます。これはどのように可能ですか? $ mplayer そしてそれを殺します: $ kill -9 $terminal_pid そして、mplayerは船に搭載されます。ターミナルエミュレータは何らかの理由でSIGKILLをキャッチしていますか?

2
GNU Linux(Arch Linux)上のSIGINFOがない
私はアプリケーションを開発していますが、必要に応じていくつかのランタイム統計をコンソールに出力したいと考えています。killすぐに信号が浮かんできました。 WikiでUnixシグナルを読むSIGINFOことは、次の理由で進むべき道のようです。 それはされて意図これらの目的のために シグナルハンドラが実装されていない場合はプロセスを終了しません(逆にSIGUSRx- ここを参照) ただし、の出力を調べるkill -lと、サーバーにこの信号が実装されていないようです。 私の質問は: なぜSIGINFO私のシステムにはないのですか?すべてのGNU Linuxシステムに存在しませんか? この信号を有効にする簡単な方法(つまり、カーネル/ glibc再コンパイルなし)はありますか?ない場合、難しい方法は何ですか? ターゲットプロセスで処理されない場合に副作用を引き起こさない、目的に使用できる代替シグナルは何ですか?(glibcのマニュアルで他の適切な信号を見つけることができなかったので、私はすでに何も想定していません) Linuxメタ情報: Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux 更新:なぜこの信号が条件付きでBSD以外のシステムから除外されるのかについての詳細をまだ探しています(以下のコメントを参照)。信号は多くの目的に非常に役立つようですので、それがただの気まぐれの問題であると私が信じるのは難しいです-それで、この信号がLinuxで利用可能になる本当のショートッパーは何ですか?
12 linux  signals  glibc 

1
コマンドpkill -USR1 -n -x ddは正確にはどういう意味ですか?
ddBeagleBoneのsdカードへのディスクイメージのネットワーク転送に使用しています。 pkill -USR1 -n -x ddこのBeagleBoneへのssh接続で使用すると、転送プロセスのステータスが更新されます。これは素晴らしいことです。それが実際にどのように機能するか知りたいので、将来的にそれを効果的に使用できます。 読んman pkillだ後でも、pkill -USR1 -n -x ddこの非常に便利なステータスの更新をどのように機能させているのかはまだ完全には説明されていませんでした。
12 kill  dd  signals 

3
トラップコマンドの信号0とは何ですか?
私は、ssh-agentを使用してパスワードなしのSSH認証を設定する方法について、このガイドに従っています。 ssh-agentを起動するには、次のコードを推奨します.bash_profile。 SSHAGENT=/usr/bin/ssh-agent SSHAGENTARGS="-s" if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then eval `$SSHAGENT $SSHAGENTARGS` trap "kill $SSH_AGENT_PID" 0 fi なぜそれがによると、信号は0をトラップされて、私は理解していない男性7信号はそのような信号がありません。 これは単なるタイプミスかバグですか、それとも本当に何かを達成していますか?
12 bash  signals  trap 

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