函数逻辑报告

Linux Kernel (v4.4)

Source File:kernel\fork.c Create Date:2016-01-14 18:24:10
Last Modify:2016-01-11 07:01:32 Copyright©Brick
首页 函数Tree
注解内核English

函数名称:copy_process

函数原型:static struct task_struct * copy_process(unsigned long clone_flags, unsigned long stack_start, unsigned long stack_size, int *child_tidptr, struct pid *pid, int trace, unsigned long tls)

返回类型:static struct task_struct *

函数参数:

类型 参数名称备注
unsigned long clone_flags创建标志
unsigned long stack_start进程堆栈
unsigned long stack_size进程堆栈尺寸
int * child_tidptr
struct pid * pid新建进程句柄
int trace
unsigned long tls

功能描述:创建进程

1253  *cgrp_ss_priv[can_fork数量] = {}
1255  如果创建标志按位与在新的namespace启动子进程按位或共享文件系统的值的值恒等于在新的namespace启动子进程按位或共享文件系统的值则返回错误号
1258  如果创建标志按位与新用户空间按位或共享文件系统的值的值恒等于新用户空间按位或共享文件系统的值则返回错误号
1265  如果创建标志按位与属于同一个线程组且非创建标志按位与共享信号处理的值则返回错误号
1273  如果创建标志按位与共享信号处理且非创建标志按位与共享虚拟内存的值则返回错误号
1283  如果创建标志按位与新进程与创建它的进程是“兄弟”而不是“父子”当前进程->信号->信号标志按位与初始化时忽略致命信号则返回错误号
1290  如果创建标志按位与属于同一个线程组
1293  如果创建标志按位与新用户空间按位或新进程空间的值或取进程的空间不等于当前进程->命名空间代理->pid_ns_for_children则返回错误号
1297  创建安全进程
1298  如果创建安全进程的结果则跳转到fork_out
1301  创建安全进程的结果等于负内存溢出
1302  p等于复制进程并设置栈
1303  如果非p则跳转到fork_out
1306  为新创建的任务分配调试栈
1308  进程互斥锁初始化
1314  retval等于负重试
1316  如果原子读大于等于进程上限
1318  如果真实用户身份不等于初始用户且非操作权限检查且非操作权限检查则跳转到bad_fork_free
1321  当前进程->任务标志等于与超出限制的反
1323  复制信任
1324  如果复制信任的结果小于0则跳转到bad_fork_free
1332  复制信任的结果等于负重试
1333  如果活跃进程数大于等于活跃进程限制数则跳转到bad_fork_cleanup_count
1336  初始化延迟记录
1337  任务标志等于与使用超级用户权限按位或进程处于工作队列中的值的反
1338  任务标志等于或已调度未运行
1339  初始化链表头
1340  初始化链表头
1341  初始化任务RCU锁
1342  完成量等于NULL
1343  初始化自旋锁
1345  初始化信号发送
1347  用户计时等于系统计时等于通用计时等于0
1348  用户时间片等于系统时间片等于0
1349  prev_cputime_init( &进程耗时)
1358  rss_stat的地址内存赋值为0
1361  默认空闲时间等于当前进程->空闲时间
1363  初始化I/O记录
1364  清除累计
1366  线程组计时器初始化
1368  进程创建时间戳等于ktime_get_ns()
1369  进程创建系统时间戳等于ktime_get_boot_ns()
1370  异步I/O请求等于NULL
1371  安全审计等于NULL
1372  启动交换线程组信息
1373  共享cgroup信息
1375  Protected by alloc_lock等于mpol_dup( Protected by alloc_lock)
1376  如果是错误
1377  错误
1378  Protected by alloc_lock等于NULL
1379  跳转到bad_fork_cleanup_threadgroup_lock
1383  下次使用节点号等于无非均匀存储器节点
1384  slab节点等于无非均匀存储器节点
1385  顺序计数初始化
1403  pagefault_disabled等于0
1406  锁深度等于0
1407  curr_chain_key等于0
1408  lockdep_recursion等于0
1412  死锁检测等于NULL
1420  调度进程
1421  如果调度进程的结果则跳转到bad_fork_cleanup_policy
1424  进程性能调优
1425  如果进程性能调优的结果则跳转到bad_fork_cleanup_policy
1427  安全审计
1428  如果安全审计的结果则跳转到bad_fork_cleanup_perf
1431  shm_init_task
1432  If CLONE_SYSVSEM is set, establish sharing of SEM_UNDO state between parent and child tasks.
1433  如果If CLONE_SYSVSEM is set, establish sharing of SEM_UNDO state between parent and child tasks.的结果则跳转到bad_fork_cleanup_audit
1435  复制打开文件信息
1436  如果复制打开文件信息的结果则跳转到bad_fork_cleanup_semundo
1438  复制文件系统
1439  如果复制文件系统的结果则跳转到bad_fork_cleanup_files
1441  复制信号句柄
1442  如果复制信号句柄的结果则跳转到bad_fork_cleanup_fs
1444  复制信号
1445  如果复制信号的结果则跳转到bad_fork_cleanup_sighand
1447  复制内存
1448  如果复制内存的结果则跳转到bad_fork_cleanup_signal
1450  复制名称空间
1451  如果复制名称空间的结果则跳转到bad_fork_cleanup_mm
1453  复制I/O
1454  如果复制I/O的结果则跳转到bad_fork_cleanup_namespaces
1456  复制本地(TLS)线程
1457  如果复制本地(TLS)线程的结果则跳转到bad_fork_cleanup_io
1460  如果新建进程句柄不等于进程标志的地址则
1461  新建进程句柄等于分配进程句柄
1462  如果是错误
1463  错误
1464  跳转到bad_fork_cleanup_io
1468  设置子进程tid等于如果创建标志按位与设置子进程tid则取child_tidptr否则取NULL
1472  清除子进程tid等于如果创建标志按位与清除子进程tid则取child_tidptr否则取NULL
1474  堆栈堵塞等于NULL
1477  安全队列等于NULL
1479  兼容队列等于NULL
1481  初始化链表头
1482  优先级继承高速缓存等于NULL
1487  如果创建标志按位与共享虚拟内存按位或父进程被挂起,直至子进程释放虚拟内存资源的值的值恒等于共享虚拟内存sas_ss_sp等于sas_ss_size等于0
1494  user_disable_single_step(p)
1495  清除线程指定标志
1497  清除线程指定标志
1499  clear_all_latency_tracing(p)
1502  进程ID等于取进程id
1503  如果创建标志按位与属于同一个线程组
1504  进程退出时发出的信号等于负1
1505  线程组主管等于当前进程->线程组主管
1506  线程组ID等于当前进程->线程组ID
1507  否则
1508  如果创建标志按位与新进程与创建它的进程是“兄弟”而不是“父子”进程退出时发出的信号等于当前进程->线程组主管->进程退出时发出的信号
1510  否则进程退出时发出的信号等于创建标志按位与退出发送信号掩码
1512  线程组主管等于p
1513  线程组ID等于进程ID
1516  赃页数等于0
1517  赃页阀值等于128右移页尺寸减10位
1518  开始写暂停时间等于0
1520  父进程终止时发出的信号等于0
1521  初始化链表头
1522  回调队列等于NULL
1530  called on a new task before the process is exposed
1531  如果 called on a new task before the process is exposed的结果则跳转到bad_fork_free_pid
1538  写加锁
1541  如果创建标志按位与新进程与创建它的进程是“兄弟”而不是“父子”按位或属于同一个线程组的值则
1542  真正的父进程等于当前进程->真正的父进程
1543  线程组跟踪等于当前进程->线程组跟踪
1544  否则
1545  真正的父进程等于当前进程
1546  线程组跟踪等于当前进程->私有跟踪
1549  获取指定的自旋锁
1555  复制安全计算
1565  确定进程等待信号
1566  如果设置进程等待信号
1567  自旋锁解锁
1568  写解锁
1569  called on a new task before the process is exposed的结果等于负要求系统调用被无条件重新执行
1570  跳转到bad_fork_cancel_cgroup
1573  如果此条件成立可能性大(为编译器优化)
1574  调试跟踪初始化
1576  初始化进程标志
1577  如果是线程组首领
1581  如果是资源回收器
1590  进程归集
1591  进程归集
1593  否则
1594  当前进程->信号->线程数自加
1595  计数器加1
1596  计数器加1
1602  进程归集
1603  活跃进程数自加
1606  总计创建次数自加
1607  自旋锁解锁
1608  syscall_tracepoint_update(p)
1609  写解锁
1611  关联进程与proc文件系统
1612  在任务列表中添加任务后,调用新的任务
1613  交换线程组信息收尾
1614  perf_event_fork(p)
1616  trace_task_newtask(p, 创建标志)
1617  复制上下文
1619  返回p
1621  bad_fork_cancel_cgroup
1622  进程组放弃分裂
1623  bad_fork_free_pid
1624  如果新建进程句柄不等于进程标志的地址则free_pid(新建进程句柄)
1626  bad_fork_cleanup_io
1627  如果异步I/O请求Called by the exiting task
1629  bad_fork_cleanup_namespaces
1630  exit_task_namespaces(p)
1631  bad_fork_cleanup_mm
1632  如果内存信息Decrement the use count and release all resources for an mm.
1634  bad_fork_cleanup_signal
1635  如果非创建标志按位与属于同一个线程组的值则free_signal_struct(信号)
1637  bad_fork_cleanup_sighand
1638  __cleanup_sighand(sighand)
1639  bad_fork_cleanup_fs
1640  exit_fs(p)
1641  bad_fork_cleanup_files
1642  exit_files(p)
1643  bad_fork_cleanup_semundo
1644  add semadj values to semaphores, free undo structures.
1645  bad_fork_cleanup_audit
1646  audit_free(p)
1647  bad_fork_cleanup_perf
1648  Free an unexposed, unused context as created by inheritance by perf_event_init_task below, used by fork() in case of fail.
1649  bad_fork_cleanup_policy
1651  mpol_put( Protected by alloc_lock)
1652  bad_fork_cleanup_threadgroup_lock
1654  交换线程组信息收尾
1655  Free tsk->delays. Called from bad fork and __put_task_struct where there's no risk of tsk->delays being accessed elsewhere
1656  bad_fork_cleanup_count
1657  计数器减1
1658  Clean up a task's credentials when it exits
1659  bad_fork_free
1660  free_task(p)
1661  fork_out
1662  返回错误号
调用函数
函数名称功能描述
fork_idle
_do_fork分裂进程