进程和线程的区别

                            先看进程:

                                            

#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

                             

   

 

posted @ 2020-03-16 23:44  卷哭你  阅读(143)  评论(0编辑  收藏  举报