更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_process.h 文件参考

浏览源代码.

函数

INT32 LOS_SetProcessPriority (INT32 pid, UINT16 prio)
 接口封装 - 设置进程优先级 更多...
 
INT32 LOS_GetProcessPriority (INT32 pid)
 接口封装 - 获取指定进程优先级 更多...
 
INT32 LOS_GetProcessScheduler (INT32 pid)
 获得指定进程的调度策略 更多...
 
INT32 LOS_SetProcessScheduler (INT32 pid, UINT16 policy, UINT16 prio)
 设置指定进程的调度参数,包括优先级和调度策略 更多...
 
UINT32 LOS_GetCurrProcessID (VOID)
 获取当前进程的进程ID 更多...
 
INT32 LOS_Wait (INT32 pid, USER INT32 *status, UINT32 options, VOID *rusage)
 
INT32 LOS_Waitid (INT32 pid, USER siginfo_t *info, UINT32 options, VOID *rusage)
 
INT32 LOS_GetCurrProcessGroupID (VOID)
 获取当前进程的组ID 更多...
 
INT32 LOS_GetProcessGroupID (UINT32 pid)
 
VOID LOS_Exit (INT32 status)
 LOS_Exit 进程退出 更多...
 
UINT32 LOS_GetSystemProcessMaximum (VOID)
 获取系统支持的最大进程数目 更多...
 
BOOL LOS_CheckInGroups (UINT32 gid)
 
INT32 LOS_GetUserID (VOID)
 
INT32 LOS_GetGroupID (VOID)
 
INT32 LOS_GetUsedPIDList (UINT32 *pidList, INT32 pidMaxNum)
 LOS_GetUsedPIDList
获取使用中的进程列表 更多...
 
struct fd_table_sLOS_GetFdTable (UINT32 pid)
 

变量

 C
 

函数说明

◆ LOS_CheckInGroups()

BOOL LOS_CheckInGroups ( UINT32  gid)

检查参数群组ID是否在当前用户所属群组中

在文件 los_process.c805 行定义.

806{
807 UINT32 intSave;
808 UINT32 count;
809 User *user = NULL;
810
811 SCHEDULER_LOCK(intSave);
812 user = OsCurrUserGet();//当前进程所属用户
813 for (count = 0; count < user->groupNumber; count++) {//循环对比
814 if (user->groups[count] == gid) {
815 SCHEDULER_UNLOCK(intSave);
816 return TRUE;
817 }
818 }
819
820 SCHEDULER_UNLOCK(intSave);
821 return FALSE;
822}
STATIC INLINE User * OsCurrUserGet(VOID)
unsigned int UINT32
Definition: los_typedef.h:57
UINT32 groupNumber
用户组数量
UINT32 groups[1]
函数调用图:
这是这个函数的调用关系图:

◆ LOS_Exit()

VOID LOS_Exit ( INT32  status)

LOS_Exit 进程退出

参数
status
返回
参见

在文件 los_process.c2086 行定义.

2087{
2088 UINT32 intSave;
2089
2090 (void)status;
2091 /* The exit of a kernel - state process must be kernel - state and all threads must actively exit */
2092 LosProcessCB *processCB = OsCurrProcessGet();
2093 SCHEDULER_LOCK(intSave);
2094 if (!OsProcessIsUserMode(processCB) && (processCB->threadNumber != 1)) {//内核态下进程的退出方式,必须是所有的任务都退出了
2095 SCHEDULER_UNLOCK(intSave);
2096 PRINT_ERR("Kernel-state processes with multiple threads are not allowed to exit directly\n");
2097 return;
2098 }
2099 SCHEDULER_UNLOCK(intSave);
2100
2102 OsRunningTaskToExit(OsCurrTaskGet(), OS_PRO_EXIT_OK);
2103}
LITE_OS_SEC_TEXT VOID OsProcessThreadGroupDestroy(VOID)
Definition: los_process.c:2200
STATIC INLINE BOOL OsProcessIsUserMode(const LosProcessCB *processCB)
STATIC INLINE LosProcessCB * OsCurrProcessGet(VOID)
STATIC INLINE LosTaskCB * OsCurrTaskGet(VOID)
LITE_OS_SEC_TEXT VOID OsRunningTaskToExit(LosTaskCB *runTask, UINT32 status)
Definition: los_task.c:908
volatile UINT32 threadNumber
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetCurrProcessGroupID()

INT32 LOS_GetCurrProcessGroupID ( VOID  )

获取当前进程的组ID

在文件 los_process.c1485 行定义.

1486{
1487 return LOS_GetProcessGroupID(OsCurrProcessGet()->processID);
1488}
LITE_OS_SEC_TEXT INT32 LOS_GetProcessGroupID(UINT32 pid)
Definition: los_process.c:1461
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetCurrProcessID()

UINT32 LOS_GetCurrProcessID ( VOID  )

获取当前进程的进程ID

在文件 los_process.c2161 行定义.

2162{
2163 return OsCurrProcessGet()->processID;
2164}
UINT32 processID
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetFdTable()

struct fd_table_s * LOS_GetFdTable ( UINT32  pid)

在文件 los_process.c2143 行定义.

2144{
2145 LosProcessCB *pcb = NULL;
2146 struct files_struct *files = NULL;
2147
2148 if (OS_PID_CHECK_INVALID(pid)) {
2149 return NULL;
2150 }
2151 pcb = OS_PCB_FROM_PID(pid);
2152 files = pcb->files;
2153 if (files == NULL) {
2154 return NULL;
2155 }
2156
2157 return files->fdt;
2158}
struct files_struct * files
struct fd_table_s * fdt
持有的文件表
Definition: fd_table.h:95
这是这个函数的调用关系图:

◆ LOS_GetGroupID()

INT32 LOS_GetGroupID ( VOID  )

获取当前进程的用户组ID

在文件 los_process.c842 行定义.

843{
844#ifdef LOSCFG_SECURITY_CAPABILITY
845 UINT32 intSave;
846 INT32 gid;
847
848 SCHEDULER_LOCK(intSave);
849 gid = (INT32)OsCurrUserGet()->gid;
850 SCHEDULER_UNLOCK(intSave);
851
852 return gid;
853#else
854 return 0;
855#endif
856}
signed int INT32
Definition: los_typedef.h:60
UINT32 gid
用户组ID [0,60000],0为root用户组
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetProcessGroupID()

INT32 LOS_GetProcessGroupID ( UINT32  pid)

在文件 los_process.c1461 行定义.

1462{
1463 INT32 gid;
1464 UINT32 intSave;
1465 LosProcessCB *processCB = NULL;
1466
1467 if (OS_PID_CHECK_INVALID(pid)) {
1468 return -LOS_EINVAL;
1469 }
1470
1471 SCHEDULER_LOCK(intSave);
1472 processCB = OS_PCB_FROM_PID(pid);
1473 if (OsProcessIsUnused(processCB)) {
1474 gid = -LOS_ESRCH;
1475 goto EXIT;
1476 }
1477
1478 gid = (INT32)processCB->group->groupID;
1479
1480EXIT:
1481 SCHEDULER_UNLOCK(intSave);
1482 return gid;
1483}
STATIC INLINE BOOL OsProcessIsUnused(const LosProcessCB *processCB)
ProcessGroup * group
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetProcessPriority()

INT32 LOS_GetProcessPriority ( INT32  pid)

接口封装 - 获取指定进程优先级

在文件 los_process.c1083 行定义.

1084{
1085 return OsGetProcessPriority(LOS_PRIO_PROCESS, pid);
1086}
LITE_OS_SEC_TEXT INT32 OsGetProcessPriority(INT32 which, INT32 pid)
接口封装 - 获取进程优先级 which:标识进程,进程组,用户
Definition: los_process.c:1055
函数调用图:

◆ LOS_GetProcessScheduler()

INT32 LOS_GetProcessScheduler ( INT32  pid)

获得指定进程的调度策略

在文件 los_process.c1030 行定义.

1031{
1032 UINT32 intSave;
1033
1034 if (OS_PID_CHECK_INVALID(pid)) {
1035 return -LOS_EINVAL;
1036 }
1037
1038 SCHEDULER_LOCK(intSave);
1039 LosProcessCB *processCB = OS_PCB_FROM_PID(pid);
1040 if (OsProcessIsUnused(processCB)) {
1041 SCHEDULER_UNLOCK(intSave);
1042 return -LOS_ESRCH;
1043 }
1044
1045 SCHEDULER_UNLOCK(intSave);
1046
1047 return LOS_SCHED_RR;
1048}
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetSystemProcessMaximum()

UINT32 LOS_GetSystemProcessMaximum ( VOID  )

获取系统支持的最大进程数目

在文件 los_process.c2239 行定义.

2240{
2241 return g_processMaxNum;
2242}
LITE_OS_SEC_BSS UINT32 g_processMaxNum
进程最大数量,默认64个
Definition: los_process.c:86
这是这个函数的调用关系图:

◆ LOS_GetUsedPIDList()

INT32 LOS_GetUsedPIDList ( UINT32 pidList,
INT32  pidMaxNum 
)

LOS_GetUsedPIDList
获取使用中的进程列表

参数
pidList
pidMaxNum
返回
参见

在文件 los_process.c2115 行定义.

2116{
2117 LosProcessCB *pcb = NULL;
2118 INT32 num = 0;
2119 UINT32 intSave;
2120 UINT32 pid = 1;
2121
2122 if (pidList == NULL) {
2123 return 0;
2124 }
2125 SCHEDULER_LOCK(intSave);
2126 while (OsProcessIDUserCheckInvalid(pid) == false) {//遍历进程池
2127 pcb = OS_PCB_FROM_PID(pid);
2128 pid++;
2129 if (OsProcessIsUnused(pcb)) {//未使用的不算
2130 continue;
2131 }
2132 pidList[num] = pcb->processID;//由参数带走
2133 num++;
2134 if (num >= pidMaxNum) {
2135 break;
2136 }
2137 }
2138 SCHEDULER_UNLOCK(intSave);
2139 return num;
2140}
STATIC INLINE BOOL OsProcessIDUserCheckInvalid(UINT32 pid)
函数调用图:
这是这个函数的调用关系图:

◆ LOS_GetUserID()

INT32 LOS_GetUserID ( VOID  )

获取当前进程的用户ID

在文件 los_process.c826 行定义.

827{
828#ifdef LOSCFG_SECURITY_CAPABILITY
829 UINT32 intSave;
830 INT32 uid;
831
832 SCHEDULER_LOCK(intSave);
833 uid = (INT32)OsCurrUserGet()->userID;
834 SCHEDULER_UNLOCK(intSave);
835 return uid;
836#else
837 return 0;
838#endif
839}
UINT32 userID
用户ID [0,60000],0为root用户
函数调用图:
这是这个函数的调用关系图:

◆ LOS_SetProcessPriority()

INT32 LOS_SetProcessPriority ( INT32  pid,
UINT16  prio 
)

接口封装 - 设置进程优先级

在文件 los_process.c1050 行定义.

1051{
1052 return OsSetProcessScheduler(LOS_PRIO_PROCESS, pid, prio, LOS_GetProcessScheduler(pid));
1053}
LITE_OS_SEC_TEXT INT32 OsSetProcessScheduler(INT32 which, INT32 pid, UINT16 prio, UINT16 policy)
设置进程调度计划
Definition: los_process.c:983
LITE_OS_SEC_TEXT INT32 LOS_GetProcessScheduler(INT32 pid)
获得指定进程的调度策略
Definition: los_process.c:1030
函数调用图:
这是这个函数的调用关系图:

◆ LOS_SetProcessScheduler()

INT32 LOS_SetProcessScheduler ( INT32  pid,
UINT16  policy,
UINT16  prio 
)

设置指定进程的调度参数,包括优先级和调度策略

在文件 los_process.c1025 行定义.

1026{
1027 return OsSetProcessScheduler(LOS_PRIO_PROCESS, pid, prio, policy);
1028}
函数调用图:

◆ LOS_Wait()

INT32 LOS_Wait ( INT32  pid,
USER INT32 status,
UINT32  options,
VOID *  rusage 
)

在文件 los_process.c1313 行定义.

1314{
1315 (VOID)rusage;
1316 UINT32 ret;
1317
1318 ret = OsWaitOptionsCheck(options);
1319 if (ret != LOS_OK) {
1320 return -ret;
1321 }
1322
1323 return OsWait(pid, status, NULL, options, NULL);
1324}
STATIC UINT32 OsWaitOptionsCheck(UINT32 options)
Definition: los_process.c:1245
STATIC INT32 OsWait(INT32 pid, USER INT32 *status, USER siginfo_t *info, UINT32 options, VOID *rusage)
等待子进程结束并回收子进程,返回已经终止的子进程的进程ID号,并清除僵死进程。
Definition: los_process.c:1265
函数调用图:
这是这个函数的调用关系图:

◆ LOS_Waitid()

INT32 LOS_Waitid ( INT32  pid,
USER siginfo_t *  info,
UINT32  options,
VOID *  rusage 
)

在文件 los_process.c1350 行定义.

1351{
1352 (VOID)rusage;
1353 UINT32 ret;
1354
1355 /* check options value */
1356 ret = OsWaitidOptionsCheck(options);
1357 if (ret != LOS_OK) {
1358 return -ret;
1359 }
1360
1361 return OsWait(pid, NULL, info, options, NULL);
1362}
STATIC UINT32 OsWaitidOptionsCheck(UINT32 options)
Definition: los_process.c:1326
函数调用图:
这是这个函数的调用关系图:

变量说明

◆ C

C
extern
初始值:
{
#endif
#endif
extern INT32 LOS_Fork(UINT32 flags, const CHAR *name, const TSK_ENTRY_FUNC entry, UINT32 stackSize)
macro EXC_SP_SET stackSize
Definition: asm.h:50
VOID *(* TSK_ENTRY_FUNC)(UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
Define the type of a task entrance function.
Definition: los_task.h:480
LITE_OS_SEC_TEXT INT32 LOS_Fork(UINT32 flags, const CHAR *name, const TSK_ENTRY_FUNC entry, UINT32 stackSize)
Definition: los_process.c:2060
char CHAR
Definition: los_typedef.h:63