cloneの疑問を15分程度で追ってみる(いい加減)
仕事や諸事情で体調があまりよくなく文書が更新できていない...。
勉強会で話題になった件。
clone()システムコールのflagのうち、CLONE_PARENTって何に使うのだろう?
用途がまったく思い浮かばない.....。謎だ.....。
とあるML上でも質問が放られたが、誰も回答していない。う〜ん、ますます気になる。
とりあえず疑問はとっておこう。
あと、個人的な疑問。CLONE_FSの「filesystem information」って何だ?
grepしてみると、fork.cの以下の関数で処理わけに使っている。
static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) { struct fs_struct *fs = current->fs; if (clone_flags & CLONE_FS) { /* tsk->fs is already what we want */ write_lock(&fs->lock); if (fs->in_exec) { write_unlock(&fs->lock); return -EAGAIN; } fs->users++; write_unlock(&fs->lock); return 0; } tsk->fs = copy_fs_struct(fs); if (!tsk->fs) return -ENOMEM; return 0; }
どうもtask_structの中のfs_struct構造体がポイントみたい。
include/linux/fs_struct.h内で以下の様に定義されている。見たところ、プロセスのルートディレクトリとカレントディレクトリ、それとパーミッションを決める際のumaskを管理している様だ。
「filesystem information」って、これだけ?何か拍子抜け。
struct fs_struct { int users; rwlock_t lock; int umask; int in_exec; struct path root, pwd; };