tail
最初のシェルは引数なしでコマンドを実行します。
2番目のシェルでは、straceを使用して最初のtailを終了してシステムコールを監視します。
qdii@nomada ~ $ strace kill 1713
execve("/bin/kill", ["kill", "1713"], [/* 82 vars */]) = 0
brk(0) = 0x2533000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dacfe8000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
この命令について知りませんでしたがbrk
、調べてみると、プロセスデータセグメントの終わりが変わることがわかりました。なぜkill
このようなことをするのですか?特にデータセグメントを設定することは0
ほとんど意味がないようです。
ベストアンサー1
ランタイム・ライブラリー呼び出しは、データ・sbrk
セグメントの現在の終わりを読み取ります。ご覧のように、システムコールsbrk
の上に実装されて間違ったアドレスで呼び出されると、単に現在の値が返されます。brk
brk