Linuxの備忘録とか・・・(目次へ)Linuxの備忘録とか・・・(目次へ)CLONE_THREADcloneシステムコールをCLONE_THREADフラグによるpid/tid/sid/gidの検証サンプルです。0));}SYS_getpid/SYS_gettid/SYS_getsid/SYS_getpgidシステムコールは以下の通りです。pで、p->pids[PIDTYPE_PID]にプロセス自身のIDが、p->pids[PIDTYPE_PGID]にcurrent->pids[PIDTYPE_PGID]が、p->pids[PIDTYPE_SID]にcurrent->pids[PIDTYPE_SID]が設定されます。pidとtidはプロセス自身のI同で、sid/gidは親プロセスを継承します。CLONE_THREADならpidとtidは同値になります。current->group_leaderで、p->pids[PIDTYPE_PID]のみプロセス自身のIDが設定されます。従ってpid/tid/sid/gidは親のそれを継承します。pidとtidが異なるプロセスはCLONE_THREADである。pidが同じで、そのpidとtidプロセスが違うプロセス等は、pidのプロセスからCLONE_THREADで作成されたプロセスと言う事です。parentのgidは、pidと同じです。forkからcloneをコールすると、必ずgidは親のgidを継承しますが、シェルコマンドでのgidはカレントのpidと同じで、親(シェル)のgidを継承していません。pidとgidが同じプロセスはグループリーダとなります。シェルがコマンドを起動する時、fork/cloneでプロセスを作成し、シェルがそのプロセスのgidをpidで更新して後、execで差し替えていると思います。(execが差し替えてるのかもしれません・・・)シェルで起動したコマンドプロセス毎に独自のpidをgidに設定することで、、以降の子プロセスはこのgidを継承することで、シェルコマンド下単位での管理が可能となります。CLONE_SIGHANDが設定されてなければなりません。CLONE_SIGHANDフラグは、CLONE_VMが設定されなければなりません。CLONE_THREADはCLONE_SIGHAND/CLONE_VMが設定されなければ、cloneはエラーとなります。current->mmとし、親プロセスのメモリ空間を共有します。故にCLONE_SIGHANDはcurrent->sighand->countインクリメントするだけでシグナルハンドラの共有が可能となり、CLONE_SIGHANDフラグは、CLONE_VMが設定されなければなりません。ノースAdsense広告情報が設定されていません。