OpenHarmony设备开发小型系统内核(LiteOS-A) 调测与工具系统命令
版本:V3.2Beta
kill
命令功能
kill命令用于发送特定信号给指定进程,让它去终结不正常的应用。
命令格式
kill [-l [signo] | -s signo | -signo] pid…
参数说明
表1 参数说明
参数 | 参数说明 | 取值范围 |
–help | 查看kill命令支持的参数列表 | N/A |
-l | 列出信号名称和编号。 | N/A |
-s | 发送信号 | N/A |
signo | 信号ID。 | [1, 30] |
pid | 进程ID。 | [1, MAX_INT] |
须知:
signo有效范围为[0, 64],建议取值范围为[1, 30],其余为保留内容。
使用指南
- 必须指定发送的信号编号及进程号。
- 进程编号取值范围根据系统配置变化,例如系统最大支持pid为256,则取值范围缩小为[1, 256]。
特殊说明
kill命令以及参数 shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。
使用实例
- 查看当前进程列表,查看需要杀死的进程PID(42)。
OHOS:/$ ps
allCpu(%): 4.67 sys, 195.33 idle
PID PPID PGID UID Status VirtualMem ShareMem PhysicalMem CPUUSE10s PName
1 -1 1 0 Pending 0x33b000 0xbb000 0x4db02 0.0 init
2 -1 2 0 Pending 0xdabc08 0 0xdabc08 1.14 KProcess
3 1 3 7 Pending 0x72e000 0x1a3000 0x1d24c2 0.0 foundation
4 1 4 8 Pending 0x362000 0xbb000 0x5c6ff 0.0 bundle_daemon
5 1 5 1 Pending 0xdfa000 0x2e7000 0x1484f0 0.0 appspawn
6 1 6 0 Pending 0x688000 0x137000 0x11bca0 0.0 media_server
7 1 7 0 Pending 0x9d2000 0x103000 0xa1cdf 0.88 wms_server
8 1 8 2 Pending 0x1f5000 0x48000 0x47dc2 0.2 mksh
10 5 5 101 Pending 0x11ec000 0x2f9000 0x206047 0.93 com.example.launcher
12 1 12 0 Pending 0x4d4000 0x112000 0xe0882 0.0 deviceauth_service
13 1 13 0 Pending 0x34f000 0xbd000 0x51799 0.0 sensor_service
14 1 14 2 Pending 0x34e000 0xb3000 0x52184 0.0 ai_server
15 1 15 0 Pending 0x61f000 0x13b000 0x168071 0.45 softbus_server
42 8 42 2 Pending 0x1c1000 0x3a000 0x1106a 0.9 test_demo
43 8 43 2 Running 0x1d7000 0x3a000 0x1e577 0.0 toybox
- 发送信号9(SIGKILL默认行为为立即终止进程)给42号进程test_demo(用户态进程):kill -s 9 42(kill -9 42效果相同),并查看当前进程列表,42号进程已终止。
OHOS:/$ kill -s 9 42
OHOS:/$
[1] + Killed ./nfs/test_demo
OHOS:/$ ps
allCpu(%): 4.73 sys, 195.27 idle
PID PPID PGID UID Status VirtualMem ShareMem PhysicalMem CPUUSE10s PName
1 -1 1 0 Pending 0x33b000 0xbb000 0x4e01c 0.0 init
2 -1 2 0 Pending 0xda5fa4 0 0xda5fa4 1.14 KProcess
3 1 3 7 Pending 0x72e000 0x1a3000 0x1d29dc 0.0 foundation
4 1 4 8 Pending 0x362000 0xbb000 0x5cc19 0.0 bundle_daemon
5 1 5 1 Pending 0xdfa000 0x2e7000 0x148a0a 0.0 appspawn
6 1 6 0 Pending 0x688000 0x137000 0x11c1ba 0.0 media_server
7 1 7 0 Pending 0x9d2000 0x103000 0xa21f9 0.89 wms_server
8 1 8 2 Pending 0x1f5000 0x48000 0x482dc 0.2 mksh
10 5 5 101 Pending 0x11ec000 0x2f9000 0x206561 0.93 com.example.launcher
12 1 12 0 Pending 0x4d4000 0x112000 0xe0d9c 0.0 deviceauth_service
13 1 13 0 Pending 0x34f000 0xbd000 0x51cb3 0.0 sensor_service
14 1 14 2 Pending 0x34e000 0xb3000 0x5269e 0.0 ai_server
15 1 15 0 Pending 0x61f000 0x13b000 0x16858b 0.51 softbus_server
45 8 45 2 Running 0x1d7000 0x3a000 0x1e9f5 0.0 toybox
- 发送不存在的信号值 kill -100 31
输出说明
发送成功或失败输出结果如下。
示例1 发送信号给指定进程
OHOS:/$ kill -s 9 42
OHOS:/$
[1] + Killed ./nfs/test_demo
信号发送成功会显示的提示进程已被杀死。
示例2 信号发送失败
OHOS:/$ kill -100 31
kill: Unknown signal '(null)'
信号发送失败,示例2所示原因为信号发送命令参数无效,请排查信号编号及进程编号是否有效。
log
命令功能
log命令用于修改&查询日志配置。
命令格式
log level [levelNum]
参数说明
表1 参数说明
参数 | 参数说明 | 取值范围 |
levelNum | 配置日志打印等级。 | [0, 5] |
使用指南
- 该命令依赖于LOSCFG_SHELL_LK,使用时通过menuconfig在配置项中开启"Enable Shell lk": Debug —> Enable a Debug Version —> Enable Shell —> Enable Shell lK。
- log level命令用于配置日志的打印等级,包括6个等级 TRACE_EMG = 0,
TRACE_COMMON = 1,
TRACE_ERROR = 2,
TRACE_WARN = 3,
TRACE_INFO = 4,
TRACE_DEBUG = 5
若level不在有效范围内,会打印提示信息。 - 若log level命令不加[levelNum]参数,则默认查看当前打印等级,并且提示使用方法。
- 开源小型系统源码设置level 为4或者5会有超多打印。
使用实例
举例:输入log level 3
输出说明
示例 设置当前日志打印级别为3
OHOS # log level 3
Set current log level WARN
memcheck
命令功能
检查动态申请的内存块是否完整,是否存在内存越界造成节点损坏。
命令格式
memcheck
参数说明
无
使用指南
- 当内存池所有节点完整时,输出"system memcheck over, all passed!"。
- 当内存池存在节点不完整时,输出被损坏节点的内存块信息。
使用实例
举例:
- 输入memcheck
- 输入memcheck出现内存越界
输出说明
示例1 当前没有内存越界
OHOS # memcheck
system memcheck over, all passed!
示例2 出现内存越界
[L0S DLnkCheckMenl 349, memory check
stFreeNodeInfo.pstPrev:0x7e0d31f3 is out of legal mem range[0x80ba5f40, 0х83d00000]
cur node: 0x81f2ce0c
pre node: 0x81f28a98
pre node was allocated by task:sofia
uwEхcTуpe = 0х2
puмExcBuffAddr pc = 0x803ad7a4
puwExcBuffAddr lr = 0x803ad7a4
puwExcBuffAddr sp = 0х80cb7de0
puwExcBuffAddr fp = 0x80cb7dec
***backtrace begin***
traceback 0 -- lr = 0х8037cb84
traceback 0 -- fp = 0х80cb7e1c
traceback 1 -- lr = 0х8037033c
traceback 1 -- fp = 0х80cb7e24
traceback 2 -- lr = 0x8000d108
traceback 2 -- fp = 0х80cb7e94
traceback 3 -- lr = 0х8037c7ac
traceback 3 -- fp = 0х80cb7ea4
traceback 4 -- lr = 0x803ad9e8
traceback 4 -- fp = 9x11111111
oom
命令功能
查看和设置低内存阈值以及pagecache内存回收阈值。
命令格式
oom
oom -i [interval]
oom -m [mem byte]
oom -r [mem byte]
oom -h | --help
参数说明
表1 参数说明
参数 | 参数说明 | 取值范围 |
-i [interval] | 设置oom线程任务检查的时间间隔。 | [100, 10000] 单位: ms |
-m [mem byte] | 设置低内存阈值。 | 0MB ~ 1MB,0MB表示不做低内存阈值检查。 |
-r [mem byte] | 设置pagecache内存回收阈值。 | 低内存阈值 ~ 系统可用最大内存,一个pagecache页一般为4KB,也有16 ~ 64KB的情况。 |
-h | --help | 使用帮助。 | N/A |
使用指南
参数缺省时,显示oom功能当前配置信息。
说明:
当系统内存不足时,会打印出内存不足的提示信息。
使用实例
举例:
- oom
- oom -i 100
输出说明
示例1 oom缺省打印配置信息
OHOS:/$ oom
[oom] oom loop task status: enabled
oom low memory threshold: 0x80000(byte)
oom reclaim memory threshold: 0x500000(byte)
oom check interval: 100(microsecond)
系统内存不足时打印提示信息
T:20 Enter:IT MEM 00M 001
[oom] OS is in low memory state
total physical memory: 0x1bcf000(byte), used: 0x1b50000(byte) ,free: 0x7f000(byte), low memory threshold: 0x80000(byte)
[oom] candidate victim process init pid: 1, actual phy mem byte:82602
[oom] candidate victim process shell pid: 3, actual phy mem byte:14950e
[oom] candidate victim process testsuits app pid: 4, actual phy mem byte:1334598
[oom] candidate victim process UserProcess12 pid: 12, actual phy mem byte:25951558
[oom] max phy mem used process UserProcess12 pid: 12, actual phy mem 25951558
################excFrom: User!####################
data abort fsr:0x817, far:0x225af000
Abort caused by a write instruction. Translation fault, page
excType: data abort
processName = UserProcess12
processID = 12
process aspace = 0х01000000 -> 0х3f000000
taskName = threado
taskID = 22
task user stack = 0х20e17000 -> 0х20e21000
pc = 0x93969dc in /usr/bin/testsuits app ---> 0x19f9dc
ulr = 0x93969cc in /usr/bin/testsuits app ---> 0x19f9cc
usp = 0х20e20c68fp = 0x20e20c8c
R0 = 0х20e35000
R1 = 0x225af000
R2 = 0x0
R3 = 0х28e35000
R4 = 0х0
R5 = 0х9500000
R6 = 0х14
R7 = 0х97822c4
R8 = 0x970cfa8
R9 = 0x9090909
R10 = 0xa0a0a0a
R11 = 0x20e20c8c
R12 = 0х0
CPSR = 0х80000010
***backtrace beain***
traceback 0 -- lr = 0x9242e1c fp = 0х20e20cc4 lr in /usr/bin/testsuits apr 0x4be1c
traceback 1 -- 1r = 0х92430cc fp = 0x20e20cdc lr in /usr/bin/testsuits app --> 0x4c0cc
traceback 2 -- 1r = 0x9396ab0 fp = 0x20e20cec lr in /usr/bin/testsuits app -> 0х19fab0
traceback 3 -- lr = 0x9393eb4 fp = 0x20e20cf4 lr in /usr/bin/testsuits ap --> 0x19ceb4
traceback 4 -- lr = 0x92427d4 fp = 0x20e20d44 lr in /usr/bin/testsuits app --> 0x4b7d4
traceback 5 -- 1r = 0x20c4df50 fp = 0хb0b0b0b 1r in /1ib/libc.so - -> 0x62f50
示例2 设置 oom 线程任务检查的时间间隔
OHOS:/$ oom -i 100
[oom] set oom check interval (100)ms successful
表2 输出说明
输出 | 说明 |
[oom] OS is in low memory state total physical memory: 0x1bcf000(byte), used: 0x1b50000(byte), free: 0x7f000(byte), low memory threshold: 0x80000(byte) | 操作系统处于低内存状态。 整个系统可用物理内存为0x1bcf000 byte,已经使用了 0x1b50000 byte, 还剩0x7f000 byte,当前设置的低内存阈值为0x80000 byte。 |
[oom] candidate victim process init pid: 1, actual phy mem byte: 82602 | 打印当前各个进程的内存使用情况,init进程实际占用物理内存82602byte。 |
[oom] candidate victim process UserProcess12 pid: 12, actual phy mem byte: 25951558 | UserProcess12进程实际使用25951558byte内存。 |
[oom] max phy mem used process UserProcess12 pid: 12, actual phy mem: 25951558 | 当前使用内存最多的进程是UserProcess12。 |
excFrom: User! |
pmm
命令功能
查看系统内存物理页及pagecache物理页使用情况。
命令格式
pmm
参数说明
无
使用指南
Debug版本才具备的命令。
使用实例
举例:输入pmm
输出说明
示例 查看物理页使用情况
OHOS # pmm
phys_seg base size free_pages
-------- ------- ---------- ---------
0x4065552c 0x809b0000 0x07550000 22344
order = 0, free_count = 16
order = 1, free_count = 12
order = 2, free_count = 8
order = 3, free_count = 6
order = 4, free_count = 13
order = 5, free_count = 16
order = 6, free_count = 12
order = 7, free_count = 4
order = 8, free_count = 79
active anon 0
inactive anon 0
active file 1385
inactice file 84
pmm pages: total = 30032, used = 7688, free = 22344
pathCache number = 325
pathCache memory size = 17621(B)
Vnode number = 67
Vnode memory size = 10720(B)
表1 输出说明
输出 | 说明 |
phys_seg | 物理页控制块地址信息 |
base | 第一个物理页地址,即物理页内存起始地址 |
size | 物理页内存大小 |
free_pages | 空闲物理页数量 |
active anon | pagecache中,活跃的匿名页数量 |
inactive anon | pagecache中,不活跃的匿名页数量 |
active file | pagecache中,活跃的文件页数量 |
inactive file | pagecache中,不活跃的文件页数量 |
pmm pages | total:总的物理页数,used:已使用的物理页数,free:空闲的物理页数 |
reset
命令功能
reset命令用于重启设备。
命令格式
reset
参数说明
无
使用指南
reset命令输入后,设备会立刻重启。
使用实例
reset
输出说明
无
sem
命令功能
sem命令用于查询系统内核信号量相关信息。
命令格式
sem [ID_ / fulldata_]
参数说明
表1 参数说明
参数 | 参数说明 | 取值范围 |
ID | 信号量ID。 | [0, 1023]或[0x0, 0x3FF] |
fulldata | 查询所有在用的信号量信息,打印信息包括如下:SemID, Count, Original Count, Creator TaskEntry, Last Access Time。 | N/A |
使用指南
- 参数缺省时,显示所有的信号量的使用数及信号量总数。
- sem后加ID,显示对应ID信号量的使用数。
- 参数fulldata依赖于LOSCFG_DEBUG_SEMAPHORE,使用时通过menuconfig在配置项中开启"Enable Semaphore Debugging": Debug —> Enable a Debug Version —> Enable Debug LiteOS Kernel Resource —> Enable Semaphore Debugging
使用实例
- 输入sem
- 配置LOSCFG_DEBUG_SEMAPHORE标志,输入 sem fulldata
输出说明
示例1 查询所有在用的信号量信息
OHOS # sem
SemID Count
---------- -----
0x00000000 1
SemID Count
---------- -----
0x00000001 0
SemID Count
---------- -----
0x00000002 0
SemID Count
---------- -----
0x00000003 1
SemID Count
---------- -----
0x00000004 0
SemID Count
---------- -----
0x00000005 1
SemID Count
---------- -----
0x00000006 0
表2 输出说明
输出 | 说明 |
SemID | 信号量ID。 |
Count | 信号量使用数。 |
说明:
● sem命令的ID参数输入形式以十进制形式表示或十六进制形式表示皆可。
● sem命令的ID参数在[0, 1023]范围内时,返回对应ID的信号量的状态(如果对应ID的信号量未被使用则进行提示);其他取值时返回参数错误的提示。
示例2 查询所有在用的信号量信息
OHOS # sem fulldata
Used Semaphore List:
SemID Count OriginalCount Creator(TaskEntry) LastAccessTime
------ ------ ------------- ------------------ --------------
0xb 0x0 0x0 0x404978fc 0xa1
0xc 0x0 0x0 0x404978fc 0xa1
0xd 0x0 0x0 0x404978fc 0x12c
0x10 0x0 0x0 0x404978fc 0x195
0xf 0x0 0x0 0x404978fc 0x195
0x11 0x0 0x0 0x4041a998 0x1d5
0x15 0x0 0x0 0x404978fc 0x273
0x14 0x0 0x0 0x404978fc 0x273
0x18 0x0 0x0 0x404978fc 0x352
0x17 0x0 0x0 0x404978fc 0x352
0x16 0x0 0x0 0x404978fc 0x352
0x1d 0x1 0x1 0x404978fc 0x385
0x1e 0x1 0x1 0x404978fc 0x388
0x1f 0x1 0x1 0x404978fc 0x38d
0x20 0x1 0x1 0x404978fc 0x38f
0x21 0x1 0x1 0x404978fc 0x392
0x3d 0x1 0x1 0x404978fc 0x395
0x3b 0x1 0x1 0x404978fc 0x395
0x3c 0x1 0x1 0x404978fc 0x395
0x39 0x1 0x1 0x404978fc 0x395
0x3a 0x1 0x1 0x404978fc 0x395
0x33 0x1 0x1 0x404978fc 0x395
0x35 0x1 0x1 0x404978fc 0x395
0x34 0x1 0x1 0x404978fc 0x395
0x38 0x1 0x1 0x404978fc 0x395
表3 输出说明
输出 | 说明 |
SemID | 信号量ID。 |
Count | 信号量使用数。 |
OriginalCount | 信号量原始计数。 |
Creator | 信号量的创建线程的入口函数地址。 |
LastAccessTime | 上次访问时间。 |