js-apis-process.md 10.4 KB
Newer Older
Z
zengyawen 已提交
1
# 获取进程相关的信息
Z
zengyawen 已提交
2

Z
zengyawen 已提交
3 4
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
Z
zengyawen 已提交
5

Z
zengyawen 已提交
6 7

## 导入模块
Z
zengyawen 已提交
8 9 10 11 12

```
import process from '@ohos.process';
```

Z
zengyawen 已提交
13 14 15
## 系统能力

SystemCapability.Utils.Lang
Z
zengyawen 已提交
16 17 18 19 20

## 属性

| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
21 22 23 24 25 26 27 28
| egid | number | 是 | 否 | 进程的有效组标识。 |
| euid | number | 是 | 否 | 进程的有效用户身份。 |
| gid | number | 是 | 否 | 进程的组标识。 |
| uid | number | 是 | 否 | 进程的用户标识。 |
| groups | number[] | 是 | 否 | 带有补充组id的数组。 |
| pid | number | 是 | 否 | 当前进程的pid。 |
| ppid | number | 是 | 否 | 当前进程的父进程的pid。 |
| tid<sup>8+</sup> | number | 是 | 否 | 当前进程的tid。 |
Z
zengyawen 已提交
29 30 31


## ChildProcess
Z
zengyawen 已提交
32 33 34 35

主进程可以获取子进程的标准输入输出,以及发送信号和关闭子进程。


Z
zengyawen 已提交
36
### 属性
Z
zengyawen 已提交
37

Z
zengyawen 已提交
38 39 40 41 42 43
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| pid | number | 是 | 否 | 子进程的pid。 |
| ppid | number | 是 | 否 | 子进程的父进程的pid。 |
| exitCode | number | 是 | 否 | 子进程的退出码。 |
| killed | boolean | 是 | 否 | 父进程给子进程发信号是否成功。 |
Z
zengyawen 已提交
44 45


Z
zengyawen 已提交
46
### wait
Z
zengyawen 已提交
47

Z
zengyawen 已提交
48
wait(): Promise&lt;number&gt;
Z
zengyawen 已提交
49

Z
zengyawen 已提交
50
等待子进程运行结束,返回promise对象,其值为子进程的退出码。
Z
zengyawen 已提交
51

Z
zengyawen 已提交
52 53 54 55 56
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;number&gt; | 异步返回子进程的退出码。 |
Z
zengyawen 已提交
57

Z
zengyawen 已提交
58 59 60 61 62 63 64 65 66
**示例:**

```
var child = process.runCmd('ls');
var result = child.wait();
result.then(val=>{
    console.log("result = " + val);
})
```
Z
zengyawen 已提交
67 68


Z
zengyawen 已提交
69
### getOutput
Z
zengyawen 已提交
70

Z
zengyawen 已提交
71 72 73
getOutput(): Promise&lt;Uint8Array&gt;

获取子进程的标准输出。
Z
zengyawen 已提交
74

Z
zengyawen 已提交
75
**返回值:**
Z
zengyawen 已提交
76

Z
zengyawen 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;Uint8Array&gt; | 异步返回标准输出的字节流。 |

**示例:**

```
var child = process.runCmd('ls');
var result = child.wait();
child.getOutput.then(val=>{
    console.log("child.getOutput = " + val);
})
```
Z
zengyawen 已提交
90 91


Z
zengyawen 已提交
92
### getErrorOutput
Z
zengyawen 已提交
93

Z
zengyawen 已提交
94
getErrorOutput(): Promise&lt;Uint8Array&gt;
Z
zengyawen 已提交
95 96 97

getErrorOutput函数用来获取子进程的标准错误输出。

Z
zengyawen 已提交
98 99 100 101 102
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;Uint8Array&gt; | 异步返回标准错误输出的字节流。 |
Z
zengyawen 已提交
103

Z
zengyawen 已提交
104 105 106 107 108 109 110 111 112
**示例:**

```
var child = process.runCmd('madir test.text');
var result = child.wait();
child.getErrorOutput.then(val=>{
    console.log("child.getErrorOutput= " + val);
})
```
Z
zengyawen 已提交
113 114


Z
zengyawen 已提交
115
### close
Z
zengyawen 已提交
116

Z
zengyawen 已提交
117
close():  void
Z
zengyawen 已提交
118

Z
zengyawen 已提交
119
关闭正在运行的子进程。
Z
zengyawen 已提交
120

Z
zengyawen 已提交
121 122 123 124 125 126
**示例:**

```
var child = process.runCmd('sleep 5; ls');
child.close();
```
Z
zengyawen 已提交
127 128


Z
zengyawen 已提交
129
### kill
Z
zengyawen 已提交
130

Z
zengyawen 已提交
131
kill(signal: number | string): void
Z
zengyawen 已提交
132

Z
zengyawen 已提交
133
kill函数用来发送信号给子进程,结束指定进程。
Z
zengyawen 已提交
134

Z
zengyawen 已提交
135 136 137 138 139
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| signal | number&nbsp;\|&nbsp;string | 是 | 数字或字符串。 |
Z
zengyawen 已提交
140

Z
zengyawen 已提交
141 142 143 144 145 146
**示例:**

```
var child = process.runCmd('sleep 5; ls');
child.kill(9);
```
Z
zengyawen 已提交
147 148


Z
zengyawen 已提交
149 150 151 152
## process.isIsolatedProcess<sup>8+</sup>

isIsolatedProcess(): boolean

153
判断进程是否被隔离。
Z
zengyawen 已提交
154

Z
zengyawen 已提交
155
**返回值:**
Z
zengyawen 已提交
156

Z
zengyawen 已提交
157 158 159 160 161 162 163 164 165
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回判断结果,如果返回true表示进程被隔离。 |

**示例:**

```
var result = process.isIsolatedProcess();
```
Z
zengyawen 已提交
166 167 168 169 170 171


## process.isAppUid<sup>8+</sup>

isAppUid(v:number): boolean

172
判断uid是否属于应用程序。
Z
zengyawen 已提交
173

Z
zengyawen 已提交
174 175 176 177 178 179 180
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| v | number | 是 | 应用程序的uid。 |

**返回值:**
Z
zengyawen 已提交
181

Z
zengyawen 已提交
182 183 184
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回判断结果,如果返回true表示为应用程序的uid。|
Z
zengyawen 已提交
185

Z
zengyawen 已提交
186 187 188 189 190
**示例:**

```
var result = process.isAppUid(688);
```
Z
zengyawen 已提交
191 192 193 194 195 196


## process.is64Bit<sup>8+</sup>

is64Bit(): boolean

197
判断运行环境是否64位。
Z
zengyawen 已提交
198

Z
zengyawen 已提交
199 200 201 202 203
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回判断结果,如果返回true表示为64位环境。 |
Z
zengyawen 已提交
204

Z
zengyawen 已提交
205 206 207 208 209
**示例:**

```
var ressult = process.is64Bit();
```
Z
zengyawen 已提交
210 211 212 213 214 215 216 217


## process.getUidForName<sup>8+</sup>

getUidForName(v:string): number

通过进程名获取进程uid。

Z
zengyawen 已提交
218
**参数:**
Z
zengyawen 已提交
219

Z
zengyawen 已提交
220 221 222
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| v | string | 是 | 进程名。 |
Z
zengyawen 已提交
223

Z
zengyawen 已提交
224 225 226 227 228 229 230 231 232 233 234
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回进程uid。|

**示例:**

```
var pres = process.getUidForName("tool")
```
Z
zengyawen 已提交
235 236 237 238 239 240


## process.getThreadPriority<sup>8+</sup>

getThreadPriority(v:number): number

241
根据指定的tid获取线程优先级。
Z
zengyawen 已提交
242

Z
zengyawen 已提交
243 244 245 246 247
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| v | number | 是 | 指定的线程tid。 |
Z
zengyawen 已提交
248

Z
zengyawen 已提交
249
**返回值:**
Z
zengyawen 已提交
250

Z
zengyawen 已提交
251 252 253 254 255 256 257 258 259 260
| 类型 | 说明 |
| -------- | -------- |
| number | 返回线程的优先级。 |

**示例:**

```
var tid = process.getTid();
var pres = process.getThreadPriority(tid);
```
Z
zengyawen 已提交
261 262 263 264


## process.getStartRealtime<sup>8+</sup>

X
xdmal 已提交
265
getStartRealtime(): number
Z
zengyawen 已提交
266 267 268

获取从系统启动到进程启动所经过的实时时间(以毫秒为单位)。

Z
zengyawen 已提交
269
**返回值:**
Z
zengyawen 已提交
270

Z
zengyawen 已提交
271 272 273 274 275 276 277 278 279
| 类型 | 说明 |
| -------- | -------- |
| number | 返回经过的实时时间。|

**示例:**

```
var realtime = process.getStartRealtime();
```
Z
zengyawen 已提交
280 281 282

## process.getPastCputime<sup>8+</sup>

X
xdmal 已提交
283
getPastCputime(): number
Z
zengyawen 已提交
284 285 286

获取进程启动到当前时间的CPU时间(以毫秒为单位)。

Z
zengyawen 已提交
287 288 289 290 291 292 293
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回经过的CPU时间。 |

**示例:**
Z
zengyawen 已提交
294

Z
zengyawen 已提交
295 296 297
```
var result = process.getPastCputime() ;
```
Z
zengyawen 已提交
298 299 300 301 302 303


## process.getSystemConfig<sup>8+</sup>

getSystemConfig(name:number): number

Z
zengyawen 已提交
304
获取系统配置信息。
Z
zengyawen 已提交
305

Z
zengyawen 已提交
306 307 308 309 310
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | number | 是 | 指定系统配置参数名。 |
Z
zengyawen 已提交
311

Z
zengyawen 已提交
312
**返回值:**
Z
zengyawen 已提交
313

Z
zengyawen 已提交
314 315 316 317 318 319 320 321 322 323
| 类型 | 说明 |
| -------- | -------- |
| number | 返回系统配置信息。 |

**示例:**

```
var _SC_ARG_MAX = 0
var pres = process.getSystemConfig(_SC_ARG_MAX)
```
Z
zengyawen 已提交
324 325 326 327 328 329 330 331


## process.getEnvironmentVar<sup>8+</sup>

getEnvironmentVar(name:string): string

用该方法获取环境变量对应的值。

Z
zengyawen 已提交
332
**参数:**
Z
zengyawen 已提交
333

Z
zengyawen 已提交
334 335 336
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 环境变量名。 |
Z
zengyawen 已提交
337

Z
zengyawen 已提交
338 339 340 341 342 343 344 345 346 347 348
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| string | 返回环境变量名对应的value。 |

**示例:**

```
var pres = process.getEnvironmentVar("PATH")
```
Z
zengyawen 已提交
349 350


Z
zengyawen 已提交
351 352 353
## process.runCmd

runCmd(command: string, options?: { timeout : number, killSignal :number | string, maxBuffer : number }) : ChildProcess
Z
zengyawen 已提交
354 355 356

通过runcmd可以fork一个新的进程来运行一段shell,并返回ChildProcess对象。

Z
zengyawen 已提交
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| command | string | 是 | shell命令。 |
| options | Object | 否 | 相关选项参数。 |

**表1** options

| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| timeout | number | 否 | 子进程运行的ms数,当子进程运行时间超出此时间,则父进程发送killSignal信号给子进程。timeout默认为0。 |
| killSignal | number&nbsp;&nbsp;\|&nbsp;string | 否 | 子进程运行时间超出timeout时,父进程发送killSignal&nbsp;信号给子进程。killSignal&nbsp;默认为'SIGTERM'。 |
| maxBuffer | number | 否 | 子进程标准输入输出的最大缓冲区大小,当超出此大小时则终止子进程。maxBuffer默认1024\*1024。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| [ChildProcess](#childprocess) | 子进程对象。 |

**示例:**

```
var child = process.runCmd('ls', { maxBuffer : 2 });
var result = child.wait();
child.getOutput.then(val=>{
    console.log("child.getOutput = " + val);
})
```
Z
zengyawen 已提交
387 388 389


## process.abort
Z
zengyawen 已提交
390

Z
zengyawen 已提交
391
abort(): void
Z
zengyawen 已提交
392

Z
zengyawen 已提交
393 394
该方法会导致进程立即退出并生成一个核心文件,谨慎使用。

Z
zengyawen 已提交
395 396 397 398 399
**示例:**

```
process.abort();
```
Z
zengyawen 已提交
400 401


Z
zengyawen 已提交
402
## process.on
Z
zengyawen 已提交
403

Z
zengyawen 已提交
404
on(type: string, listener: EventListener): void
Z
zengyawen 已提交
405 406 407

用该方法来存储用户所触发的事件。

Z
zengyawen 已提交
408 409 410 411 412 413 414 415
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 存储事件的type。 |
| listener | EventListener | 是 | 回调的事件。 |

**表2** EventListener
Z
zengyawen 已提交
416

Z
zengyawen 已提交
417 418 419
| 名称 | 说明 |
| -------- | -------- |
| EventListener&nbsp;=&nbsp;(evt:&nbsp;Object)&nbsp;=&gt;&nbsp;void | 用户存储的事件。 |
Z
zengyawen 已提交
420

Z
zengyawen 已提交
421 422 423 424 425 426 427
**示例:**

```
process.on("data", (e)=>{
    console.log("data callback");
})
```
Z
zengyawen 已提交
428 429 430 431 432


## process.off

off(type: string): boolean
Z
zengyawen 已提交
433 434 435

用该方法来删除用户存储的事件。

Z
zengyawen 已提交
436
**参数:**
Z
zengyawen 已提交
437

Z
zengyawen 已提交
438 439 440
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 删除事件的type。 |
Z
zengyawen 已提交
441

Z
zengyawen 已提交
442 443 444 445 446 447 448 449 450 451 452 453 454 455
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 事件是否删除成功。 |

**示例:**

```
process.on("data", (e)=>{
    console.log("data callback");
})
var result = process.off("data");
```
Z
zengyawen 已提交
456 457 458 459 460


## process.exit

exit(code: number): void
Z
zengyawen 已提交
461 462 463

用该方法终止程序,谨慎使用。

Z
zengyawen 已提交
464
**参数:**
Z
zengyawen 已提交
465

Z
zengyawen 已提交
466 467 468 469 470 471 472 473 474
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| code | number | 是 | 进程的退出码。 |

**示例:**

```
process.exit(0);
```
Z
zengyawen 已提交
475 476 477 478 479


## process.cwd

cwd(): string
Z
zengyawen 已提交
480

Z
zengyawen 已提交
481
用该方法获取进程的工作目录。
Z
zengyawen 已提交
482

Z
zengyawen 已提交
483 484 485 486 487
**示例:**

```
var path = process.cwd();
```
Z
zengyawen 已提交
488 489


Z
zengyawen 已提交
490
## process.chdir
Z
zengyawen 已提交
491

Z
zengyawen 已提交
492
chdir(dir: string): void
Z
zengyawen 已提交
493 494 495

用该方法更改进程的当前工作目录。

Z
zengyawen 已提交
496 497 498 499 500
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| dir | string | 是 | 路径。 |
Z
zengyawen 已提交
501

Z
zengyawen 已提交
502 503 504 505 506
**示例:**

```
process.chdir('/system');
```
Z
zengyawen 已提交
507 508


Z
zengyawen 已提交
509
## process.uptime
Z
zengyawen 已提交
510

Z
zengyawen 已提交
511
uptime(): number
Z
zengyawen 已提交
512

Z
zengyawen 已提交
513
获取当前系统已运行的秒数。
Z
zengyawen 已提交
514

Z
zengyawen 已提交
515 516 517 518 519
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 当前系统已运行的秒数。 |
Z
zengyawen 已提交
520

Z
zengyawen 已提交
521 522 523 524 525
**示例:**

```
var time = process.uptime();
```
Z
zengyawen 已提交
526 527


Z
zengyawen 已提交
528
## process.kill
Z
zengyawen 已提交
529

Z
zengyawen 已提交
530
kill(pid: number,signal: number ): boolean
Z
zengyawen 已提交
531

Z
zengyawen 已提交
532
用该方法发送signal到指定的进程,结束指定进程。
Z
zengyawen 已提交
533

Z
zengyawen 已提交
534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pid | number | 是 | 进程的id。 |
| signal | number | 是 | 发送的信号。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 信号是否发送成功。 |

**示例:**
```
var pres = process.pid
var result = that.kill(pres, 28)
```