函数逻辑报告

linux kernel

5.5.9

Brick

Source Code:kernel\fork.c Create Date:2020-03-23 11:25:16
Last Modify:2020-03-17 11:04:53 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载PLEAEnglish

函数名称:创建进程

函数原型:static __latent_entropy struct task_struct *copy_process(struct pid *pid, int trace, int node, struct kernel_clone_args *args)

返回类型:struct task_struct

参数:

类型参数名称
struct pid *pid任务标志
inttrace
intnode
struct kernel_clone_args *args
1830  pidfd等于负1
1833  pidfile等于NULL
1834  clone_flags等于flags
1840  如果clone_flags按位与在新的namespace启动子进程按位或共享文件系统的值的值恒等于在新的namespace启动子进程按位或共享文件系统的值则返回:错误号
1843  如果clone_flags按位与新用户空间按位或共享文件系统的值的值恒等于新用户空间按位或共享文件系统的值则返回:错误号
1850  如果clone_flags按位与属于同一个线程组且非clone_flags按位与共享信号处理的值则返回:错误号
1858  如果clone_flags按位与共享信号处理且非clone_flags按位与共享虚拟内存的值则返回:错误号
1867  如果clone_flags按位与新进程与创建它的进程是“兄弟”而不是“父子”flags按位与for init: ignore fatal signals 则返回:错误号
1875  如果clone_flags按位与属于同一个线程组
1876  如果clone_flags按位与新用户空间按位或新进程空间的值或取进程的空间不等于pid_ns_for_children则返回:错误号
1882  如果clone_flags按位与set if a pidfd should be placed in parent
1888  如果clone_flags按位与Unused, ignored 按位或属于同一个线程组的值则返回:错误号
1898  sigemptyset( & signal)
1899  INIT_HLIST_NODE( & node)
1901  获取指定的自旋锁并禁止中断
1902  如果非clone_flags按位与属于同一个线程组的值则hlist_add_head( & node, & multiprocess)
1904  确定进程等待信号
1905  解自旋锁并开中断
1906  retval等于负ERESTARTNOINTR
1907  如果signal_pending(当前进程)则转到:fork_out
1910  retval等于负内存溢出
1911  p等于复制进程并设置栈
1912  如果非p则转到:fork_out
1921  设置子进程tid等于如果clone_flags按位与设置子进程tidchild_tid否则NULL
1925  清除子进程tid等于如果clone_flags按位与清除子进程tidchild_tid否则NULL
1927  ftrace_graph_init_task(p)
1929  进程互斥锁初始化
1935  retval等于负再试一遍
1936  如果atomic_read( & processes)大于等于task_rlimit(p, RLIMIT_NPROC)则
1938  如果user不等于INIT_USER且非操作权限检查且非操作权限检查则转到:bad_fork_free
1942  flags与等于超出限制的反
1944  retval等于复制信任
1945  如果retval小于0则转到:bad_fork_free
1953  retval等于负再试一遍
1954  如果活跃进程数大于等于活跃进程限制数则转到:bad_fork_cleanup_count
1957  初始化延迟记录
1958  任务标志与等于使用超级用户权限按位或进程处于工作队列中按位或I am an IDLE thread 的值的反
1959  任务标志或等于已调度未运行
1960  初始化链表头
1961  初始化链表头
1962  rcu_copy_process(p)
1963  完成量等于NULL
1964  spin_lock_init( & Protection against (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed, mempolicy: )
1966  初始化信号发送
1968  用户计时等于系统计时等于通用计时等于0
1972  prev_cputime_init( & 进程耗时)
1981  memset( & rss_stat, 0, rss_stat的长度)
1984  默认空闲时间等于timer_slack_ns
1990  初始化I/O记录
1991  清除累计
1993  posix_cputimers_init( & Empty if CONFIG_POSIX_CPUTIMERS=n )
1995  异步I/O请求等于NULL
1996  audit_set_context(p, NULL)
1997  initialize cgroup related fields during copy_process()
1999  Protected by alloc_lock: 等于mpol_dup( Protected by alloc_lock: )
2000  如果是错误
2001  retval等于错误
2002  Protected by alloc_lock: 等于NULL
2003  转到:bad_fork_cleanup_threadgroup_lock
2027  pagefault_disabled等于0
2042  retval等于调度进程
2043  如果retval则转到:bad_fork_cleanup_policy
2046  retval等于perf_event_init_task(p)
2047  如果retval则转到:bad_fork_cleanup_policy
2049  retval等于audit_alloc(p)
2050  如果retval则转到:bad_fork_cleanup_perf
2053  shm_init_task(p)
2054  retval等于security_task_alloc(p, clone_flags)
2055  如果retval则转到:bad_fork_cleanup_audit
2057  retval等于If CLONE_SYSVSEM is set, establish sharing of SEM_UNDO state between * parent and child tasks.
2058  如果retval则转到:bad_fork_cleanup_security
2060  retval等于复制打开文件信息
2061  如果retval则转到:bad_fork_cleanup_semundo
2063  retval等于复制文件系统
2064  如果retval则转到:bad_fork_cleanup_files
2066  retval等于复制信号句柄
2067  如果retval则转到:bad_fork_cleanup_fs
2069  retval等于复制信号
2070  如果retval则转到:bad_fork_cleanup_sighand
2072  retval等于复制内存
2073  如果retval则转到:bad_fork_cleanup_signal
2075  retval等于复制名称空间
2076  如果retval则转到:bad_fork_cleanup_mm
2078  retval等于复制I/O
2079  如果retval则转到:bad_fork_cleanup_namespaces
2081  retval等于Architectures that haven't opted into copy_thread_tls get the tls argument * via pt_regs, so ignore the tls argument passed via C
2083  如果retval则转到:bad_fork_cleanup_io
2086  stackleak_task_init(p)
2088  如果任务标志不等于init_struct_pid
2089  任务标志等于分配进程句柄
2091  如果是错误
2092  retval等于错误
2093  转到:bad_fork_cleanup_thread
2102  如果clone_flags按位与set if a pidfd should be placed in parent
2103  retval等于get_unused_fd_flags(O_RDWR | O_CLOEXEC)
2104  如果retval小于0则转到:bad_fork_free_pid
2107  pidfd等于retval
2109  pidfile等于creates a new file instance by hooking it up to an * anonymous inode, and a dentry that describe the "class" * of the file
2111  如果是错误
2113  retval等于错误
2114  转到:bad_fork_free_pid
2116  get_pid(任务标志)
2118  retval等于Write a simple value into user space.(pidfd, pidfd)
2119  如果retval则转到:bad_fork_put_pidfd
2124  堆栈堵塞等于NULL
2126  futex_init_task(p)
2131  如果clone_flags按位与共享虚拟内存按位或父进程被挂起,直至子进程释放虚拟内存资源的值的值恒等于共享虚拟内存sas_ss_reset(p)
2138  user_disable_single_step(p)
2139  清除线程指定标志
2141  清除线程指定标志
2143  clear_tsk_latency_tracing(p)
2146  进程ID等于取进程id
2147  如果clone_flags按位与属于同一个线程组
2148  进程退出时发出的信号等于负1
2149  线程组主管等于group_leader
2150  线程组ID等于tgid
2151  否则
2152  如果clone_flags按位与新进程与创建它的进程是“兄弟”而不是“父子”进程退出时发出的信号等于exit_signal
2154  否则进程退出时发出的信号等于exit_signal
2156  线程组主管等于p
2157  线程组ID等于进程ID
2160  赃页数等于0
2161  赃页阀值等于128右移determines the page size 减10位
2162  开始写暂停时间等于0
2164  父进程终止时发出的信号等于0
2165  初始化链表头
2166  回调队列等于NULL
2168  开始摘除线程组
2175  retval等于called on a new task before the process is exposed
2176  如果retval则转到:bad_fork_cgroup_threadgroup_change_end
2187  进程创建时间戳等于ktime_get_ns()
2188  Boot based time in nsecs: 等于ktime_get_boottime_ns()
2194  write_lock_irq( & tasklist_lock)
2197  如果clone_flags按位与新进程与创建它的进程是“兄弟”而不是“父子”按位或属于同一个线程组的值则
2198  真正的父进程等于real_parent
2199  线程组跟踪等于parent_exec_id
2200  否则
2201  真正的父进程等于当前进程
2202  线程组跟踪等于self_exec_id
2205  Called from copy_process() during fork
2207  获取指定的自旋锁
2213  复制安全计算
2215  rseq_fork(p, clone_flags)
2218  如果此条件成立可能性小(为编译器优化)(!(pid_allocated & PIDNS_ADDING))则
2219  retval等于负内存溢出
2220  转到:bad_fork_cancel_cgroup
2224  如果fatal_signal_pending(当前进程)则
2225  retval等于负系统调用被禁止
2226  转到:bad_fork_cancel_cgroup
2230  如果pidfilefd_install(pidfd, pidfile)
2233  init_task_pid_links(p)
2234  如果此条件成立可能性大(为编译器优化)(进程ID)则
2235  调试跟踪初始化
2237  初始化进程标志
2238  如果thread_group_leader(p)则
2243  如果是资源回收器
2247  signal等于signal
2248  tty等于取终端设备
2258  进程归集
2259  进程归集
2260  进程归集
2262  否则
2263  nr_threads自加
2264  atomic_inc( & live)
2272  进程归集
2273  活跃进程数自加
2275  总计创建次数自加
2276  hlist_del_init( & node)
2277  自旋锁解锁
2278  syscall_tracepoint_update(p)
2279  write_unlock_irq( & tasklist_lock)
2281  关联进程与proc文件系统
2282  called on a new task after adding it to the task list
2283  摘除线程组完成
2284  perf_event_fork(p)
2286  trace_task_newtask(p, clone_flags)
2287  复制上下文
2289  返回:p
2291bad_fork_cancel_cgroup:
2292  自旋锁解锁
2293  write_unlock_irq( & tasklist_lock)
2294  called if a fork failed after cgroup_can_fork()
2295bad_fork_cgroup_threadgroup_change_end:
2296  摘除线程组完成
2297bad_fork_put_pidfd:
2298  如果clone_flags按位与set if a pidfd should be placed in parent
2299  fput(pidfile)
2300  put_unused_fd(pidfd)
2302bad_fork_free_pid:
2303  如果任务标志不等于init_struct_pidfree_pid(任务标志)
2305bad_fork_cleanup_thread:
2306  exit_thread(p)
2307bad_fork_cleanup_io:
2308  如果异步I/O请求Called by the exiting task
2310bad_fork_cleanup_namespaces:
2311  exit_task_namespaces(p)
2312bad_fork_cleanup_mm:
2313  如果内存信息
2314  mm_clear_owner(内存信息, p)
2315  Decrement the use count and release all resources for an mm.
2317bad_fork_cleanup_signal:
2318  如果非clone_flags按位与属于同一个线程组的值则free_signal_struct(信号)
2320bad_fork_cleanup_sighand:
2321  __cleanup_sighand(sighand)
2322bad_fork_cleanup_fs:
2323  exit_fs(p)
2324bad_fork_cleanup_files:
2325  exit_files(p)
2326bad_fork_cleanup_semundo:
2327  add semadj values to semaphores, free undo structures
2328bad_fork_cleanup_security:
2329  security_task_free(p)
2330bad_fork_cleanup_audit:
2331  audit_free(p)
2332bad_fork_cleanup_perf:
2333  perf_event_free_task(p)
2334bad_fork_cleanup_policy:
2335  lockdep_free_task(p)
2337  mpol_put( Protected by alloc_lock: )
2338bad_fork_cleanup_threadgroup_lock:
2340  delayacct_tsk_free(p)
2341bad_fork_cleanup_count:
2342  atomic_dec( & processes)
2343  Clean up a task's credentials when it exits
2344bad_fork_free:
2345  任务状态等于TASK_DEAD
2346  put_task_stack(p)
2347  delayed_free_task(p)
2348fork_out:
2349  获取指定的自旋锁并禁止中断
2350  hlist_del_init( & node)
2351  解自旋锁并开中断
2352  返回:错误号
调用者
名称描述
fork_idle
_do_fork分裂进程