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

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

5
sshを取得して信号を転送する
sshを介してシグナル(SIGINTが最も重要)を送信できるようにしたい。 このコマンド: ssh server "sleep 1000;echo f" > foo サーバーでスリープを開始し、1000秒後にローカルマシンのファイルfooに「f \ n」を入れます。CTRL-Cを押す(つまり、sshにSIGINTを送信する)と、sshは強制終了されますが、リモートサーバーのスリープは強制終了されません。リモートサーバーでスリープを終了させたい。 だから私は試しました: ssh server -t "sleep 1000;echo f" > foo しかし、stdinが端末でない場合、次のエラーが表示されます。 Pseudo-terminal will not be allocated because stdin is not a terminal. SIGINTはまだ転送されません。 だから私は試しました: ssh server -t -t "sleep 1000;echo f" > output しかし、fooの出力は「f \ n」ではなく「f \ r \ …
22 ssh  remote  tty  signals 

5
ターミナル経由でGUIアプリケーションをソフトキルする方法は?
アプリケーションウィンドウにグラフィカルにアクセスせずに、「今すぐ終了してください」という方法でGUIアプリケーションを閉じる方法はありますか? たとえば、Gnome / Xディスプレイが黒にクラッシュした場合、tty2に切り替えて、Firefoxなどのアプリケーションを閉じて、設定などを保存できるようにします。


1
SSHセッションでのCtrl-C処理
長時間実行されるコマンドを実行するSSHセッションを開始すると、Ctrl+ C(SIGINT)処理はどうなりますか? SSHセッションが閉じていることがわかりますが、誰が最初にSIGINTを取得するかわかりません:それは... リモートの長時間実行コマンド?つまり、(a)リモートコマンドのシグナルハンドラーが呼び出されてリモートコマンドを停止します。(b)コマンドを停止したことを検出したシェルは(c)リモートsshdが停止したシェルを検出し、そのため、接続を閉じます または ローカルsshは信号を受信し、接続を閉じます。 (1)は起こっていると思うが、確認したい。 また、この場合のSIGINTのシェル処理で何が起こるかについても不明です。たとえば、私が... ssh remote 'while true ; do sleep 1 ; date ; done' およびCtrl+のC場合、リモート接続は切断されます。Ctrl+の後も存続するシェルの下でリモートコマンドを実行する方法はありCますか?つまり、この場合、ループを停止し、リモートシェルで作業を続けることができますか?
20 ssh  signals 


6
プロセスの子孫
プロセスコンテナを構築しようとしています。コンテナは他のプログラムをトリガーします。たとえば、「&」を使用して実行中のバックグラウンドタスクを起動するbashスクリプト。 私が望んでいる重要な機能はこれです:私がコンテナを殺すとき、その下にスポーンされたすべてのものが殺されるべきです。直接子供だけでなく、その子孫も。 このプロジェクトを始めたとき、プロセスを強制終了すると、その子も自動的に強制終了されると誤って信じていました。私は同じ間違った考えを持っていた人々からのアドバイスを求めてきました。信号をキャッチして子供に殺害を伝えることは可能ですが、ここでは探していません。 xtermを閉じると、その中で実行されていたものはすべて、nohup'dされない限り殺されるので、私は達成したいものを信じています。これには、孤立したプロセスが含まれます。それが私が再現したいものです。 私が探しているのは、Unixセッションに関するものだと思います。 プロセスのすべての子孫を識別する信頼できる方法があれば、それらにも任意のシグナルを送信できると便利です。例:SIGUSR1。

1
マルチスレッドLinuxプロセスがシグナルを受け取るとどうなりますか?
Unix(Posix)プロセスがシグナルを受信すると、シグナルハンドラが実行されます。 マルチスレッドプロセスではどうなりますか?どのスレッドがシグナルを受信しますか? 私の意見では、シグナルAPIはそれを処理するように拡張する必要があります(つまり、シグナルハンドラのスレッドを決定できるはずです)が、Linuxカーネルのメーリングリストやさまざまなフォーラム。私が理解したように、Linusの概念はPosix標準とは異なり、最初にいくつかの互換レイヤーが構築されましたが、現在ではLinuxはposixモデルに従います。 現在の状態は何ですか?



1
キーボードから信号を受信するアプリケーションは誰が決定しますか?
ターミナルのキーボードからの信号に関する私の現在の理解は、(私の観測をグーグルで見つけられるものにマップしようとすることに主に基づいています)次のとおりです: ユーザーがCcを押す これは、cの7ビットASCII値から左端の2ビットをクリアすることにより計算されるバイトとして、端末の入力バッファに送信されます。 この後、実際に霧が発生し始めます。これは、どの入力が端末(stty)で行われる信号を意味するためです。ターミナル自体がプロセスにシグナルを送信していることを意味すると思います。しかし、私もその端末はそれを読んでいるアプリケーションについて知りません。 端末のキーボードで信号を送信すると、エンドツーエンドでどのように機能しますか?
16 terminal  signals 

3
なぜfork()はファイル記述子を返すように設計されているのですか?
彼の上に関するウェブページの自己パイプのトリック、ダン・バーンスタインはと競合状態を説明select()し、信号、回避策を提供していますし、その結論を もちろん、正しいことはfork()プロセスIDではなくファイル記述子を返すことです。 彼はこれによって何を意味しselect()ますか?シグナルハンドラを使用してそれらの状態変化を通知する代わりに、子プロセスで状態変化を処理することができるということですか?

1
bash-builtinがCPUを100%焼くのを待つ
少なくともGNU bashバージョン4.3.42 x86_64 && GNU bashバージョン4.3.11 x86_64で発生します シグナルによって割り込み可能にするために(SIGUSR1として)sleep & wait $!単純な代わりに使用します。ただし、次のコマンドを実行すると、bashビルトインが奇妙な動作をするようです。sleepsleepwait ターミナル1: cat <( trap 'echo SIGUSR1' SIGUSR1; echo $BASHPID; while :;do sleep 1 & wait $!; echo test; done )& ターミナル2: kill -10 /the pid of the subshell, printed by the previous command/ ターミナル1: ^C (ctrl + C) 次に、CPUを100%燃焼させるサブシェルを取得します。 …

1
スクリプトからバックグラウンドプロセスを開始し、スクリプトの終了時に管理します
スクリプトからデーモンに似たプロセスを実行および構成したいと思います。 私のシェルはCygwinでエミュレートされたzshであり、デーモンは基本的なFTPサーバーであるSFKです。 ここで重要なのは、スクリプトstartserv.shを次のように作成できることです。 #!/bin/sh read -s -p "Enter Password: " pw user=testuser share=/fshare cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share" $cmd & スクリプトを実行した後startserv.sh、プロンプトを表示せずに停止(終了?)します: CTRL+ Cスクリプトとバックグラウンドジョブプロセスの両方を終了します。 叩くEnterスクリプトは、プロセスがバックグラウンドに残って終わります。 とにかく私はのみを経由して、それを見ることができpsないjobs私は、プロセスを閉じたいとき、そう、私は残忍送信する必要がありkill -9、私は賛成で避けたいのですが何かある信号、 CTRL+をC。 別の方法 は、スクリプト全体をバックグラウンドで実行することです。「Would be」ですがread、スクリプトがとして実行される場合、コマンドはユーザー入力を取得できませんstartserv.sh &。 真のデーモンではなく、一時サーバーが必要なことに注意してください。つまり、スクリプトが終了した後、サーバープロセスをバックグラウンドで実行して、(仮想マシンゲストで)簡単なインタラクティブシェルタスクを実行する必要がありますが、シェルを生き残るためのプロセスが必要です。したがって、nohup適切ではないようです。

4
bashでの2つの同時コマンドを含むCtrl-C
Linuxマシンのbashで2つのコマンドを同時に実行したい。したがって、私の./execute.shbashスクリプトに次のように記述します。 command 1 & command 2 echo "done" ただし、bashスクリプトを停止してCtrl+を押したい場合はC、2番目のコマンドのみが停止します。最初のコマンドは実行を続けます。完全なbashスクリプトが停止したことを確認するにはどうすればよいですか?または、いずれにせよ、両方のコマンドを停止するにはどうすればよいですか?この場合、Ctrl+ を何度押しCてもコマンドが実行され続け、端末を閉じる必要があるためです。

2
EXIT、DEBUG、RETURN、およびERRシグナルはありますか?
trapbash の組み込みの構文は次のとおりです。 trap [-lp] [arg] [sigspec ...] ...それぞれsigspecが信号名または信号番号のいずれかです。シグナル名は大文字と小文字を区別せず、SIGプレフィックスはオプションです。 ... そのうちbashのマニュアルのポイントは、sigspecすることができEXIT、DEBUG、RETURN、とERR。それらは信号の名前ですか? 以下に示すすべての信号名のリストでそれらを見つけられないのはなぜSIGですか? それらはbashシェルにのみ関連し、Linux OSには関連していませんか?それらはbashシェル信号ですか?Linux OS信号ではありませんか? $ trap -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) …
14 bash  signals 

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