• 进程和线程的区别


                                先看进程:

                                                

    #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

                                 

       

    一勤天下无难事。
  • 相关阅读:
    前端cookie操作用到的一些小总结
    sublime 官方正版,自己用的插件配置,最轻量级安装流程
    Node.js 终端输出颜色设置
    Mac中设置别名 (转载)
    Swift 3 使用objc_setAssociatedObject
    ruby 笔记
    编程模式
    rvm pod gem 等常用命令
    node.js 笔记
    Node.js 对象合并
  • 原文地址:https://www.cnblogs.com/nowroot/p/12508020.html
Copyright © 2020-2023  润新知