FreeBSD初心者運用日記 このページをアンテナに追加

2009-03-21

[][][]実行中のプロセスをデーモンにする方法 19:34 実行中のプロセスをデーモンにする方法 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - 実行中のプロセスをデーモンにする方法 - FreeBSD初心者運用日記 実行中のプロセスをデーモンにする方法 - FreeBSD初心者運用日記 のブックマークコメント

Teraterm上で、バックグラウンドプロセスを起動した後、PCを落としても終了しないという誤解が多いようです。

ターミナルからログアウトすると、そのターミナルから生成したプロセスはfgやbg問わずSIGHUPシグナルが送られるので、ほとんどのプログラムはそこで終了してしまいます。

では、終了させないためにはどうすればよいかというと、

コマンドの頭にnohupをつけて実行します。

そのプロセスにたいしてはターミナルのログアウト時にSIGHUPが送られないそうです。

ここまでは、プロセスを実行する前の話です。

では、プロセスを実行してしまった後はどうすればよいか?

ctrl+zでプロセスをサスペンド後、disownコマンドを使って、disown %{ジョブ番号}を実行すればよいらしいです。

ToDo:Linuxの場合は、これでよいがFreeBSDの場合はどうするんだろう。。?

TransFreeBSDTransFreeBSD2009/03/22 16:52disownはbash/zsh系の内部コマンドのようです。なので、FreeBSDでもbashとかであれば使えるようです。
で、tcshとかcsh系にはない訳ですが、この場合、もともとHUPを送らないようです。つまりdisownが必要ないと。
http://d.hatena.ne.jp/lurker/20070220
ほかが参考になりました。

py4s-tnkpy4s-tnk2009/03/22 17:31なるほど。。勉強になりました。ありがとうございます,

2009-02-28

[][]ロックについて 21:46 ロックについて - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - ロックについて - FreeBSD初心者運用日記 ロックについて - FreeBSD初心者運用日記 のブックマークコメント

  • ロックの種類
    • アドバイザリロック・・紳士協定みたいなもので、ロックを正しく行っていないプロセスがひとつでも存在すると、他のプロセスが行っているロックの意味はなくなる。ちなみにphpflockはアドバイザリロック方式。
    • 強制ロック・・調査中(BSD/Linuxは実装されているが、その他のUNIX系の実装はあてにならないらしい)
  • ロックの種類その2
    • 共有ロック(書き込みをロックする)
    • 排他ロック(読み書き両方をロックする)
  • 共有ロックが必要なケースについて
    • ファイルの内容が途中で更新されたら困るような処理を行う場合、処理の最初から最後まで共有ロックを行う必要がある。
  • 排他ロックが必要なケースについて
    • 書き込みする場合は排他ロックが必要です。同じ場所を複数のプロセスが書き換えるようでは整合性が保てないから。あと、カウンタなどのように複数のプロセスが同時に読みこんでほしくないファイルの場合も排他ロックが必要です。
  • 共有ロックすら必要ないケースについて
    • 書き込まないファイル
    • ファイルの既存領域を読む場合で且つ追記しかされないファイル

■疑問(ToDo)

  • リモートサーバからファイルをscpで取得し、そのファイルを読み込んで何かを処理する。というようなプログラムがあったとして、「scpを取得」の部分はファイルをロックしておく必要があるんだろうか、、。共有ロックすら必要ないケースとして書き込まないファイルが該当するが、「scpを取得」してファイルを置き換えるのは「ファイルを書き込む」ことに相当するんだろうか。。?
  • 複数のファイルをロックする場合に、ファイル毎にロックするべきなのか?それとも、処理に対して1つのロックファイルを用意したほうがよいのか?

2009-02-09

[][]よんでおく 03:44 よんでおく - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - よんでおく - FreeBSD初心者運用日記 よんでおく - FreeBSD初心者運用日記 のブックマークコメント

下記のページ、とてもためになりそうなので、目をとおしておく

@nifty:@homepage:エラー

2009-02-05

[][][] 02:18 2009-02-05 - FreeBSD初心者運用日記 を含むブックマーク 2009-02-05 - FreeBSD初心者運用日記 のブックマークコメント

2chからの抜粋

677 名前: 名無しさん@お腹いっぱい。 投稿日: 2009/02/05(木) 23:37:41

質問です

ファイルhogeをsortして、fooに書き込み、fooをhogeにリネームするという処理があるとします。

$ cat hoge | sort -n > foo

$ mv foo hoge

これを、fooファイルを作らないで、hogeに直接書き込みたいのですが、どのように行えばいいでしょうか?

679 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2009/02/05(木) 23:42:43

>>677

(rm hoge; sort -n > hoge) < hoge

680 名前: 名無しさん@お腹いっぱい。 投稿日: 2009/02/06(金) 00:16:24

>>677

$ cat hoge | sort > hoge

これでいいんじゃね?

685 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2009/02/06(金) 01:17:54

>>864

本気で出来ると思ってたの? ギャグや釣りじゃなくて。

$ yes XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |head -100000 > /tmp/xxxx

$ wc /tmp/xxxx

100000 100000 5900000 /tmp/xxxx

$ cat /tmp/xxxx |sort > /tmp/xxxx

$ wc /tmp/xxxx

0 0 0 /tmp/xxxx

ToDo:ファイルが空になるのは、cat /tmp/xxxxする前に、"> /tmp/xxxx"でファイルがopenされてクリアされるからだと聞いたことがある気がする。


693 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2009/02/06(金) 01:56:13

パイプラインは順に起動されていくわけでは無い。(非同期で勝手に起動される)

例えばこういうのを

#include <sys/time.h>

#include <stdio.h>

int main(int ac, char **av)

{

struct timeval tv;

gettimeofday(&tv, NULL);

fprintf(stderr, "%s %ld.%ld¥n", av[1], tv.tv_sec, tv.tv_usec);

return 0;

}

./a.out 1 |./a.out 2|./a.out 3|./a.out 4|./a.out 5|./a.out 6|./a.out 7|./a.out 8|./a.out 9|./a.out 10

と起動してやれば、毎回起動順が変わることが観測できるだろう。

>>684で出来る方が不思議




関連?

ToDo:よんどく

シェルのリダイレクトにまつわる失敗

http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C

2009-02-02

[][][]statコマンドについて 22:34 statコマンドについて - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - statコマンドについて - FreeBSD初心者運用日記 statコマンドについて - FreeBSD初心者運用日記 のブックマークコメント

パラメタなし

~$ stat hoge.dat
1043 5800402 -rw-r--r-- 1 bush wheel 23165207 220 "Feb  2 22:34:38 2009" "Feb  2 22:33:25 2009" "Feb  2 22:33:25 2009" "Feb  2 22:31:14 2009" 16384 4 0 hoge.dat

ダブルコーテーションで囲まれている部分は、左からアクセス時刻、更新時刻、更新時刻、ステータス更新時刻のようだ。

なぜ、更新時刻が二つあるのか謎。(ToDo)

ステータス更新時刻については下記ページを参照

参考:UNIX/Linuxの部屋 用語集:タイムスタンプ UNIX におけるファイルの時刻管理 (atime/ctime/mtime) (更新時刻・更新日時・変更日時)

それぞれの時刻は-tオプションで、整形できる

~$ stat -t "%y%m%d%H%M%S" hoge.dat
1043 5800402 -rw-r--r-- 1 bush wheel 23165568 9819 "090203000710" "090203000343" "090203000343" "090202223114" 16384 20 0 hoge.dat

statコマンドで、ファイル更新時刻降順でファイル名ソートする方法

~/hoge$ ls -ltrT
total 0
-rw-r--r--  1 bush  wheel  0 Feb  3 00:24:22 2009 aaa
-rw-r--r--  1 bush  wheel  0 Feb  3 00:24:27 2009 bbb
-rw-r--r--  1 bush  wheel  0 Feb  3 00:24:30 2009 ccc
~/hoge$ stat -f "%m%t%Sm%t%N" * | sort -rn | cut -f3
ccc
bbb
aaa

stat -fで指定しているものの意味は以下のとおり

%m・・・unix timeで更新時刻を表示

%t・・・タブを出力

%Sm・・・更新日時をstrftime(3)フォーマットで表示

%N・・・ファイル名を表示