先看进程:
#include <sys/types.h> #include <unistd.h> #include <stdio.h> //pid_t fork(void); int main(void) { pid_t pid_process = fork(); printf("pid_process is %d\n",pid_process); while(1); return 0; }
strace追踪:
root@instance-tau7o2q5:~/app_modules# strace ./a.out & [2] 29652 root@instance-tau7o2q5:~/app_modules# execve("./a.out", ["./a.out"], 0x7ffee7911510 /* 27 vars */) = 0 brk(NULL) = 0x55d271de8000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=30685, ...}) = 0 mmap(NULL, 30685, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff8f2850000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff8f284e000 mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff8f2240000 mprotect(0x7ff8f2427000, 2097152, PROT_NONE) = 0 mmap(0x7ff8f2627000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7ff8f2627000 mmap(0x7ff8f262d000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff8f262d000 close(3) = 0 arch_prctl(ARCH_SET_FS, 0x7ff8f284f4c0) = 0 mprotect(0x7ff8f2627000, 16384, PROT_READ) = 0 mprotect(0x55d27033d000, 4096, PROT_READ) = 0 mprotect(0x7ff8f2858000, 4096, PROT_READ) = 0 munmap(0x7ff8f2850000, 30685) = 0 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ff8f284f790) = 29655 fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0 brk(NULL) = 0x55d271de8000 brk(0x55d271e09000) = 0x55d271e09000 write(1, "pid_process is 29655\n", 21pid_process is 29655 ) = 21 pid_process is 0
调用过程: openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ff8f284f790) = 29655
线程:
#include <stdio.h> #include <pthread.h> #include <unistd.h> //int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); static void* speaker_thread(void *arg) { while(1) { printf("speaker thread speaker music\n"); sleep(1); } } int main() { pthread_t thread_speaker1; pthread_create(&thread_speaker1,NULL,speaker_thread,NULL); while(1) { } return 0; }
编译不一样:
gcc pthread.c -lpthread
root@instance-tau7o2q5:~/app_modules# strace ./a.out execve("./a.out", ["./a.out"], 0x7ffe20f526b0 /* 27 vars */) = 0 brk(NULL) = 0x5557c981e000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=30685, ...}) = 0 mmap(NULL, 30685, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd0af4a8000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000b\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=144976, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd0af4a6000 mmap(NULL, 2221184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fd0af06a000 mprotect(0x7fd0af084000, 2093056, PROT_NONE) = 0 mmap(0x7fd0af283000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7fd0af283000 mmap(0x7fd0af285000, 13440, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fd0af285000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0 mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fd0aec79000 mprotect(0x7fd0aee60000, 2097152, PROT_NONE) = 0 mmap(0x7fd0af060000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fd0af060000 mmap(0x7fd0af066000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fd0af066000 close(3) = 0 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd0af4a3000 arch_prctl(ARCH_SET_FS, 0x7fd0af4a3740) = 0 mprotect(0x7fd0af060000, 16384, PROT_READ) = 0 mprotect(0x7fd0af283000, 4096, PROT_READ) = 0 mprotect(0x5557c792b000, 4096, PROT_READ) = 0 mprotect(0x7fd0af4b0000, 4096, PROT_READ) = 0 munmap(0x7fd0af4a8000, 30685) = 0 set_tid_address(0x7fd0af4a3a10) = 30475 set_robust_list(0x7fd0af4a3a20, 24) = 0 rt_sigaction(SIGRTMIN, {sa_handler=0x7fd0af06fcb0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fd0af07c890}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {sa_handler=0x7fd0af06fd50, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7fd0af07c890}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0 mmap(NULL, 8392704, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7fd0ae478000 mprotect(0x7fd0ae479000, 8388608, PROT_READ|PROT_WRITE) = 0 brk(NULL) = 0x5557c981e000 brk(0x5557c983f000) = 0x5557c983f000 clone(child_stack=0x7fd0aec77fb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fd0aec789d0, tls=0x7fd0aec78700, child_tidptr=0x7fd0aec789d0) = 30476 speaker thread speaker music
调用过程:
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
clone(child_stack=0x7fd0aec77fb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fd0aec789d0, tls=0x7fd0aec78700, child_tidptr=0x7fd0aec789d0) = 30476