タグ

signalに関するoinumeのブックマーク (7)

  • タブを閉じてもログアウトしても実行し続けるジョブにしておく - ザリガニが見ていた...。

    前回までにバックグラウンドでジョブを複数管理できるようになった。ところで... ターミナルでタブを開く度に、あるいはsshでどこかの端末にログインする度に、 シェルが起動して、コマンドを入力・実行・出力する環境を整えてくれる。 そして、タブを閉じたり、ログアウトすると、シェルは終了する。 と同時に、通常はそのシェル上で実行されていたジョブも終了してしまう。 不要なバックグラウンドジョブを漏れなく終了できるので、多くの場合これで良いのだけど、 稀に、シェルが終了しても処理を続けて欲しい状況もある。 特にsshでログインして時間のかかる処理(ダウンロードとか)をしている時などは、 一旦ログアウトしたいんだけど、処理はそのまま続けて欲しいことが多い。 そんな時は、nohupコマンドを使うと幸せになれる。 環境 MacBook Pro Retina15 OSX 10.9.5 $ bash --ve

    タブを閉じてもログアウトしても実行し続けるジョブにしておく - ザリガニが見ていた...。
  • シグナル (ソフトウェア) - Wikipedia

    このページの名前に関して「シグナル (プロセス間通信)」もしくは「シグナル (Unix)」への改名が提案されています。 議論はこのページのノートを参照してください。(2018年4月) シグナル(英: signal)とは、Unix系(POSIX標準に類似の)OSにおける、限定的なプロセス間通信の形式を使って、プロセスに対し、非同期で、イベントの発生を伝える機構である。シグナルが送信された際、OSは宛先プロセスの正常な処理の流れに割り込む。どんな不可分でない処理の間でも割り込むことができる。受信プロセスが以前にシグナルハンドラを登録しておけば、シグナル受信時にそのルーチンが実行される。さもなくば、デフォルトのシグナル処理が行われる。(同様なものは他のTSSなどでも開発されてはいるが、UNIXのシグナルは)1970年ごろベル研究所でUNIXに実装された。後にPOSIXである程度は標準化されている

  • signalについて(前篇)

    はじめに シグナルはUNIXなどのOSにおける非同期イベントを通知する仕組みですが、「最古のプロセス間通信」「SysV系とBSD系で動きが違う」「昔のシグナルを使うと汎用性が無くなってしまう」「スレッドと相性悪し」といった理由からか、私の経験上、業務系アプリケーションではあまり使われていません。たまに使っているものを見ると、誤った使い方をしているものが多かったりします。 ところがこのシグナル、いろいろ調べていくと意外と奥が深く、有用に使えるのに、以外と情報が少ないことがわかりました。 今さらな感もありますが、ここでは私が知っている事や、調べた結果、今までの経験から得た知識などをまとめてみたいと思います。 ただし、環境によって動作が違うことが想定され、また一部のプログラムは環境に対し重大な影響を与えてしまうものもあります。プログラム等の使用に際しては十分に注意して頂き、ご自身の責任の範囲で行

    signalについて(前篇)
  • killコマンドをjavaで捕まえる [timecafe]

  • 日記(仮) >> Javaプログラム終了時に確実に終了処理をする

    Ctrl+Cで落とした時に「後始末」な処理(ファイルを閉じるとか,DBにロールバックをかけるとか)をしてから終了させたいとか思ったときの話. 方法は2通りで,ひとつはVMのシャットダウンにフックをかける方法,もうひとつはSIGINTを捕まえるという方法. ちなみに推奨されるのは前者(というか後者が推奨されない.理由は後述). まずは一つ目から.以下の様にして,シャットダウン時に走るスレッドを用意してRuntimeに渡す. public class ShutdownHookTest { public static void main(String[] args) { ShutdownHookTest main = new ShutdownHookTest(); main.exec(); } void exec() { Runtime.getRuntime().addShutdownHook(

    oinume
    oinume 2012/03/18
    強引だけどJavaでシグナルハンドリングする方法
  • ssh経由でリモートホストで実行してるプロセスにSIGINT送りたい時 - As a Futurist...

    perl で色々管理スクリプト書いてるんですが、そのなかでこんなコードを書きました。 system("ssh remote 'rsync ...'"); で、rsyncが走ってる途中でやっぱやめたと思ってCtrl+C=SIGINTを送ったんですが、もちろん perl のプロセスは死ぬんですけど、remoteで動いてるrsyncはそのままゾンビになって残ってしまいました。 はて、いろんなところに原因が考えられるなぁということで調べてみました。 host1> ssh host2 'some-command' host2> strace -p 20279 # some-command's pid Process 20279 attached - interrupt to quit read(0, # then "Ctrl+C" on host1 (host2) "", 4096) = 0 wri

    ssh経由でリモートホストで実行してるプロセスにSIGINT送りたい時 - As a Futurist...
    oinume
    oinume 2011/04/17
    -tつける
  • Client Challenge

  • 1