Linux Daily Topics 2019年8月22日Linuxデスクトップにレスポンシブなメモリ解放を提供する「Low-Memory-Monitor」 Androidには、起動中のアプリやサービスが増え過ぎてメモリを圧迫する状態になった場合、「lowmemorykiller daemon(lmkd)」というデーモンが起動し、優先度の低いアプリ/サービスを強制的に終了し、メモリ領域を確保する仕組みがユーザスペースに実装されている。 このlkmdに似た仕組みをLinuxデスクトップのユーザスペースでも実現するべく、Red Hatでデスクトップ開発を担当するBastein Noceraは8月21日、私的なプロジェクト「Low-Memory-Monitor」を立ち上げた。 low-memory-monitor: new project announcement : /bɑs ˈtjɛ̃
killall(キルオール)は UNIX 系 OS で利用できるコマンドラインユーティリティである。このコマンドには大変異なる2種類の実装がある。 (Solaris を含む)正統な UNIX System V や(killall5 のような)Linux の sysvinit[リンク切れ] ツールが与える実装では killall は特に危険なコマンドであり、ユーザが強制終了できるプロセスを全て強制終了する。そのため root で動作させることによって効果的にシステムを終了することができる。 psmisc ツールによって与えられる実装における振る舞いは pkill や skill コマンドに似たものとなっており、コマンドラインで指定されたプロセスを強制終了させる。 killall は kill プログラムのようにシグナルを送る。 使用例[編集] すべてのプロセスを強制終了させる(UNIX Sy
Environment o Red Hat Enterprise Linux 4 o Red Hat Enterprise Linux 5 o Red Hat Enterprise Linux 6 o Red Hat Enterprise Linux 7 o Red Hat Enterprise Linux 8 o Red Hat Enterprise Linux 9 Issue We are investigating an issue with processes that are suddenly dying, and we have determined that the process receives a SIGKILL signal. However, there is no log message explaining more about the reason for t
nohup コマンドを使うとログアウト時に処理を停止させないでプログラムを続けるようにさせることができる。という説明をよくみかけますが、実際には、nohup を使わなくても、プログラムを「&」を使ってバックグラウンドで処理していれば、ログアウト後も起動されたプログラムはそのまま処理を継続します。 nohupコマンドを使うと、例えばターミナルが突然切断された等の理由でシェルがHUPシグナルを受け終了した場合でも処理を続けることができるようになります。 Last Update : 2014年03月19日 ログアウトした後もプログラムの処理を続ける?(コマンド実行時にnohup) 項目 nohup コマンド 1. nohup コマンド nohup コマンドは、ハングアップシグナル(SIGHUP, HUP)を無視するかたちでコマンドを実行させるコマンドです。 例えば、ターミナルが突然切断された等の
Section: Linux Programmer's Manual (3) Updated: 2017-09-15 Index JM Home Page roff page 名前 sigqueue - シグナルとデータをプロセスに送る 書式 #include <signal.h> int sigqueue(pid_t pid, int sig, const union sigval value); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): sigqueue(): _POSIX_C_SOURCE >= 199309L 説明 sigqueue() は sig で指定されたシグナルを、PID が pid であるプロセスに送る。 シグナルを送るのに必要な権限は kill(2) と同じである。 kill(2) と同様に、ヌルシグナル (0)
Section: Linux Programmer's Manual (2) Updated: 2017-09-15 Index JM Home Page roff page 名前 nanosleep - 高精度なスリープ 書式 #include <time.h> int nanosleep(const struct timespec *req, struct timespec *rem); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): nanosleep(): _POSIX_C_SOURCE >= 199309L 説明 nanosleep() は、少なくとも *req で指定された時間の間、プログラムの実行を遅延させる。 nanosleep() は、呼び出したスレッドの実行を、 少なくとも *req で指定された時間の間、もしくは呼び出
fork() can fail: this is important あー、fork()のことね。プロセスがもっとプロセス作るためのやつな。いや、他にもプロセス作る方法はあるけどな。ま、面白い話がもうひとつあるから聞かせてやるよ。 forkは失敗するんだぜ。分かってるか? マジで分かってるか? マジだぜ。forkは失敗するもんだ。mallocと同じさ。失敗することもある。そんなに頻繁にってわけじゃないけどさ、でも失敗したら、無視できっこないぜ。ちっとは脳みそ働かせなきゃならん。 forkが0を返したら、そいつは子プロセスで、親なら正数を返すってことは、みんな知ってるよな。その値は子のpidだ。こいつを保存しといて、あとで使うってわけだ。 失敗を確認しない場合どうなるか知ってるか? そうだよ。お前多分、"-1"(forkのエラー通知)をpidとして扱ってるんだろ。 さて、問題の始まりだ。本当
しばらくLinuxネタが続く・・。 近いうちに最近出たJava8ネタを書いてみようと思います。が、もう少しLinuxネタにお付き合いください。 前回はsshdを対象に親プロセスをkillした場合の動作を確認した。 killされたプロセスの子プロセスは孤児プロセスとなり、カーネルによって自動的にinitプロセスの子として扱われる事を説明した。(この動作を「リペアレンティング」と呼ぶ) 今回はこの続き。 Linuxで作業していてCtrl+Cしてプロセスを終了した場合、フォアグラウンドのプロセスやその子プロセスも一緒に終了する。 ということは、子プロセスは孤児として扱われず、リペアレンティングされていないことになる。 今回の記事ではこの振る舞いの違い(リペアレンティングされるか否か)に着目し、kill -SIGINTコマンドとCtrl+Cの違いについて考えていく。 そもそもkillコマンドやCt
ファイルディスクリプタは、プログラムの外部との入出力を行う抽象的なインタフェースです。Unix/Linuxのファイルディスクリプタは、一般的なファイルだけでなくデバイスやソケットやパイプも対象としています。当連載は、ファイルディスクリプタの機能や管理方法などを提示します。第3回は、設定時間をファイルディスクリプタ経由で通知する「timerfd」を紹介します。 はじめに 前回は、イベント用ファイルディスクリプタ「eventfd」の使用法や特徴を説明しました。今回は、時間を通知するファイルディスクリプタ「timefd」について解説していきたいと思います。 連載概要 この連載は、次のような内容について述べていく予定です。 連載目次 第1回:ディスクリプタの概要 第2回:イベント用ディスクリプタ「eventfd」の特徴 第3回:タイマー用ディスクリプタ「timerfd」の特徴 第4回:シグナル用デ
ホーム 検索 - ログイン | | ヘルプ 技術/UNIX/なぜnohupをバックグランドジョブとして起動するのが定番なのか?(擬似端末, Pseudo Terminal, SIGHUP他) [ Prev ] [ Next ] [ 技術 ] 何をいまさら当たり前の事を・・・と思われるだろう。 $ nohup long_run_batch.sh & SSHからログアウト後も実行を続けたいバッチジョブを、"&"を付けてバックグラウンドジョブとしてnohupから起動するのは定番中の定番である。 しかし、「nohupを使わなくても実行を続けることが出来る」やり方があったり、さらには「nohupを付けてもログアウト時に終了してしまう」パターンがあるとしたらどうだろう? そして、ある日あなたの後輩や同僚がこれらについてあなたに質問してきたら、あなたはどう答えるだろうか? 「Web上で検索したら見つか
同じシグナルがほぼ同時に複数配送される場合 シグナルハンドラを設定してwaitを呼び出すだけでは、ゾンビ防止には不十分。Unixのシグナルはキューイングされないために、シグナルが発生した数だけ、シグナルハンドラが実行されない場合があるから。 正しい解決方法は、waitの代わりにwaitpidを呼び出すこと。 //waitpidを呼び出すシグナルハンドラ void sig_child(int signo) { pid_t pid; int stat; while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) printf("child %d terminated\n", pid); return; } ネットワークプログラミングで遭遇する3種類の状況1.子プロセスをforkするプログラムでは、SIGCHLDシグナルを捕捉しなければならない。 2.シグナ
LinuxのC言語では「タイムアウトを設定してsystem関数を使いたい」と思っても、これが思うように出来ません。 「プロセスをforkさせて、子プロセスでsystem関数を実行して、親プロセスがタイムアウト時に子プロセスを殺せば良い」と思うかも知れませんが、それではうまく行きません。子プロセスを殺しても、そのときsystem関数で実行中のプロセスはinitプロセスの直下に移動してプロセスの実行を続けてしまうからです。 そこで、子プロセスでsystem関数ではなくexecv族の関数を使うようにします。そうすればタイムアウト時に親プロセスが子プロセスを殺すと、execv族の関数によって実行されているシェル関数も殺されます。 これを実装する関数を作りました。使い方は簡単。 int system_with_timeout (char *command, int timeout); command
ここでは、selectに登録しているファイルディスクリプタに対して入出力を行わず、かつ、timeoutを設定せずにselectを横から止める方法を説明したいと思います。 selectを横から止めたい時とは? selectはブロッキングAPIです。 selectを利用すると、selectに登録したファイルディスクリプタが入力/出力可能になるか、タイムアウトが来るまでブロックし続けてしまいます。 例えばマルチスレッドプログラミングなどを行っているときに、片方のスレッドでselectを使ってずっと入力を待っていたとします。 もう片方のthreadで何らかの理由により、selectのループをbreakしたくなったときにselectを解除したくなる場合があるとします。 このようなときには、selectが行われているPIDに対してシグナルを送信するとselectはEINTRで抜けてきます。 説明だけで
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く