Code makes the world a better place

Unix/Linux の `top` コマンド使用詳解

TOP 概要

top コマンド(top command)は Unix/Linux を使ううえで最も基本的なツールの 1 つです。Windows のタスクマネージャのように、現在動作しているプログラムの実行状況を監視できます。top はプログラムの監視としても最も手軽な方法の 1 つで、メモリ使用量や CPU 使用量、その他さまざまな情報を観察できます。類似ツールも多く、htopgtop のような派生版もあります。興味があれば調べてみてください。ただし基本用途であれば top で十分です。

Continue reading

Linux/Unix でコマンドから DNS を設定する

経緯はこうです。昨日から研究室のマシンが突然インターネットに繋がらなくなりました。普段そのマシンを proxy として使っていて、論文を調べるときに交大(NCTU)の IP が必要なことがあるからです。最初は Squid が壊れたのだと思い、設定をいじってかなり時間を使ってしまいましたが、どうやら問題は Squid ではなさそうでした。さらに驚いたのは、SSH でそのマシンには入れるのに、そこから外向きに通信できないという点です。

Continue reading

Shell の仕組みと簡単な実装

Shell 紹介

ローカルの Unix、Windows、あるいはサーバーへ接続するときでも、私たちは端末(Terminal)を開きます。ログイン直後に表示される画面が Shell で、開発者はここにコマンドを入力してプログラムを実行します。ある意味では、「端末を使う」ということは「Shell を使う」とほぼ同義に語られることもあります(厳密には元々の意味は一致しません)。Shell の詳細は英語版 Wikipedia の「C shell」も参考になります。

Continue reading

Unix における `sigaction` を使ったシグナルの例

Unix ではプロセス間通信の方法がいくつもあります。本記事では signal(シグナル)の簡単な使い方を紹介します。まずは Beej の紹介 を読むと良いです。名前のとおり、signal はプロセスが送受信する通知です。例えばシェルを使っているときに Ctrl-C でプログラムを中断できるのは、シェルが Ctrl-C によって送られた SIGINT シグナルを捕捉し、interrupt signal(割り込み)だと判断して実行中のプログラムを停止するためです。

signal を送るには sigaction() または signal() を使えますが、より新しい sigaction の利用をおすすめします。詳細な違いは Stack Overflow の「What is the difference between sigaction and signal?」が参考になります。

signal を発生させたい場合は kill() または sigqueue() を使えます。後者は Linux 限定ですが、siginfo を通じて signal に追加情報を載せられます。また、いくつかの system call 自体が signal を発生させることもあります。例えば存在しない socket に対して send() しようとすると SIGPIPE が発生します。

Continue reading

`mmap` を使って共有オブジェクトを作る

多数のプロセスがあり、共有データを扱うために shared memory(共有メモリ)を実装したい場合、shared memory を使って実現できます。shared memory の作成には mmap または System V の shmget を使えますが、Stack Overflow の回答「How to use shared memory with Linux in C」によると、shmget はやや古く、mmap のほうが新しく柔軟です。

shared memory を使うと、プロセス間で共有できるメモリ領域を作れます。mmap はその領域へのポインタを返し、型は void * です。そこにデータを入れたい場合は、memcpy でオブジェクトや文字列などを共有領域へコピーできます。また、void * をそのままオブジェクトポインタへキャストすれば shared object(共有オブジェクト)を作れます。こうすると別々のプロセスが同じオブジェクトへ直接アクセスできます。

Continue reading
  • Page 1 of 1