精华内容
下载资源
问答
  • 基于Python的ProcessOn思维导图一键备份
    万次阅读
    2021-12-01 22:07:35

    工作中经常用到ProcessOn,在线制作思维导图,E-R图,类图,框图,流程图,泳道图,原型图, 架构图,组件部署图,UML图,网络拓扑图,组织结构图,BPMN图,这个图,那个图,比起viso来,优点是他是一个网页版工具,打开浏览器即可画图;缺点是他是一个网页版工具,你画的图都存在别人的机器上,虽然可以下载到本地,但如果你的文件比较多,一个一个下载也比较繁琐。好的长话短说,本文提供一个基于Python的Processon文件一键备份脚本,以解决上述问题。

    技术分析:

    1.登录processon,使用cookie-editor导出cookie文件

    2.request时使用cookie参数加载cookie字典,完成用户验证

    3.递归调用接口获取文件夹和文件列表

    4.获取文件的definition

    5.根据文件的definition导出文件

    实现如下:

    import requests
    import re
    import os
    from threading import Thread
    import time
    import requests
    from io import BytesIO
    import http.cookiejar as cookielib
    from PIL import Image
    import sys
    import psutil
    import json
    import random
    import datetime
    import math
    
    base_url = 'https://www.processon.com'
    headers
    更多相关内容
  • process插件

    2016-10-05 00:37:53
    SPSS的hayes process插件,能够实现Bootstrap方法进行中介效应检验
  • Labview 中Process Monitor

    热门讨论 2014-04-02 10:47:25
    Labview中的第一个小实验,使用Process Monitor控件实现温度、压力以及容积的变化
  • 在nodejs中创建child process

    千次阅读 2021-01-25 20:12:43
    nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来手动创建...本文将会介绍一种新的执行nodejs任务的方式,child process

    简介

    nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来手动创建新的线程来执行自己的任务。

    本文将会介绍一种新的执行nodejs任务的方式,child process。

    child process

    lib/child_process.js提供了child_process模块,通过child_process我们可以创建子进程。

    注意,worker_threads创建的是子线程,而child_process创建的是子进程。

    在child_process模块中,可以同步创建进程也可以异步创建进程。同步创建方式只是在异步创建的方法后面加上Sync。

    创建出来的进程用ChildProcess类来表示。

    我们看下ChildProcess的定义:

    interface ChildProcess extends events.EventEmitter {
            stdin: Writable | null;
            stdout: Readable | null;
            stderr: Readable | null;
            readonly channel?: Pipe | null;
            readonly stdio: [
                Writable | null, // stdin
                Readable | null, // stdout
                Readable | null, // stderr
                Readable | Writable | null | undefined, // extra
                Readable | Writable | null | undefined // extra
            ];
            readonly killed: boolean;
            readonly pid: number;
            readonly connected: boolean;
            readonly exitCode: number | null;
            readonly signalCode: NodeJS.Signals | null;
            readonly spawnargs: string[];
            readonly spawnfile: string;
            kill(signal?: NodeJS.Signals | number): boolean;
            send(message: Serializable, callback?: (error: Error | null) => void): boolean;
            send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean;
            send(message: Serializable, sendHandle?: SendHandle, options?: MessageOptions, callback?: (error: Error | null) => void): boolean;
            disconnect(): void;
            unref(): void;
            ref(): void;
    
            /**
             * events.EventEmitter
             * 1. close
             * 2. disconnect
             * 3. error
             * 4. exit
             * 5. message
             */
            ...
        }
    

    可以看到ChildProcess也是一个EventEmitter,所以它可以发送和接受event。

    ChildProcess可以接收到event有5种,分别是close,disconnect,error,exit和message。

    当调用父进程中的 subprocess.disconnect() 或子进程中的 process.disconnect() 后会触发 disconnect 事件。

    当出现无法创建进程,无法kill进程和向子进程发送消息失败的时候都会触发error事件。

    当子进程结束后时会触发exit事件。

    当子进程的 stdio 流被关闭时会触发 close 事件。 注意,close事件和exit事件是不同的,因为多个进程可能共享同一个stdio,所以发送exit事件并不一定会触发close事件。

    看一个close和exit的例子:

    const { spawn } = require('child_process');
    const ls = spawn('ls', ['-lh', '/usr']);
    
    ls.stdout.on('data', (data) => {
      console.log(`stdout: ${data}`);
    });
    
    ls.on('close', (code) => {
      console.log(`子进程使用代码 ${code} 关闭所有 stdio`);
    });
    
    ls.on('exit', (code) => {
      console.log(`子进程使用代码 ${code} 退出`);
    });
    

    最后是message事件,当子进程使用process.send() 发送消息的时候就会被触发。

    ChildProcess中有几个标准流属性,分别是stderr,stdout,stdin和stdio。

    stderr,stdout,stdin很好理解,分别是标准错误,标准输出和标准输入。

    我们看一个stdout的使用:

    const { spawn } = require('child_process');
    
    const subprocess = spawn('ls');
    
    subprocess.stdout.on('data', (data) => {
      console.log(`接收到数据块 ${data}`);
    });
    

    stdio实际上是stderr,stdout,stdin的集合:

    readonly stdio: [
                Writable | null, // stdin
                Readable | null, // stdout
                Readable | null, // stderr
                Readable | Writable | null | undefined, // extra
                Readable | Writable | null | undefined // extra
            ];
    

    其中stdio[0]表示的是stdin,stdio[1]表示的是stdout,stdio[2]表示的是stderr。

    如果在通过stdio创建子进程的时候,这三个标准流被设置为除pipe之外的其他值,那么stdin,stdout和stderr将为null。

    我们看一个使用stdio的例子:

    const assert = require('assert');
    const fs = require('fs');
    const child_process = require('child_process');
    
    const subprocess = child_process.spawn('ls', {
      stdio: [
        0, // 使用父进程的 stdin 用于子进程。
        'pipe', // 把子进程的 stdout 通过管道传到父进程 。
        fs.openSync('err.out', 'w') // 把子进程的 stderr 定向到一个文件。
      ]
    });
    
    assert.strictEqual(subprocess.stdio[0], null);
    assert.strictEqual(subprocess.stdio[0], subprocess.stdin);
    
    assert(subprocess.stdout);
    assert.strictEqual(subprocess.stdio[1], subprocess.stdout);
    
    assert.strictEqual(subprocess.stdio[2], null);
    assert.strictEqual(subprocess.stdio[2], subprocess.stderr);
    

    通常情况下父进程中维护了一个对子进程的引用计数,只有在当子进程退出之后父进程才会退出。

    这个引用就是ref,如果调用了unref方法,则允许父进程独立于子进程退出。

    const { spawn } = require('child_process');
    
    const subprocess = spawn(process.argv[0], ['child_program.js'], {
      detached: true,
      stdio: 'ignore'
    });
    
    subprocess.unref();
    

    最后,我们看一下如何通过ChildProcess来发送消息:

    subprocess.send(message[, sendHandle[, options]][, callback])
    

    其中message就是要发送的消息,callback是发送消息之后的回调。

    sendHandle比较特殊,它可以是一个TCP服务器或socket对象,通过将这些handle传递给子进程。子进程将会在message事件中,将该handle传递给Callback函数,从而可以在子进程中进行处理。

    我们看一个传递TCP server的例子,首先看主进程:

    const subprocess = require('child_process').fork('subprocess.js');
    
    // 打开 server 对象,并发送该句柄。
    const server = require('net').createServer();
    server.on('connection', (socket) => {
      socket.end('由父进程处理');
    });
    server.listen(1337, () => {
      subprocess.send('server', server);
    });
    

    再看子进程:

    process.on('message', (m, server) => {
      if (m === 'server') {
        server.on('connection', (socket) => {
          socket.end('由子进程处理');
        });
      }
    });
    

    可以看到子进程接收到了server handle,并且在子进程中监听connection事件。

    下面我们看一个传递socket对象的例子:

    onst { fork } = require('child_process');
    const normal = fork('subprocess.js', ['normal']);
    const special = fork('subprocess.js', ['special']);
    
    // 开启 server,并发送 socket 给子进程。
    // 使用 `pauseOnConnect` 防止 socket 在被发送到子进程之前被读取。
    const server = require('net').createServer({ pauseOnConnect: true });
    server.on('connection', (socket) => {
    
      // 特殊优先级。
      if (socket.remoteAddress === '74.125.127.100') {
        special.send('socket', socket);
        return;
      }
      // 普通优先级。
      normal.send('socket', socket);
    });
    server.listen(1337);
    

    subprocess.js的内容:

    process.on('message', (m, socket) => {
      if (m === 'socket') {
        if (socket) {
          // 检查客户端 socket 是否存在。
          // socket 在被发送与被子进程接收这段时间内可被关闭。
          socket.end(`请求使用 ${process.argv[2]} 优先级处理`);
        }
      }
    });
    

    主进程创建了两个subprocess,一个处理特殊的优先级, 一个处理普通的优先级。

    异步创建进程

    child_process模块有4种方式可以异步创建进程,分别是child_process.spawn()、child_process.fork()、child_process.exec() 和 child_process.execFile()。

    先看一个各个方法的定义:

    child_process.spawn(command[, args][, options])
    
    child_process.fork(modulePath[, args][, options])
    
    child_process.exec(command[, options][, callback])
    
    child_process.execFile(file[, args][, options][, callback])
    

    其中child_process.spawn是基础,他会异步的生成一个新的进程,其他的fork,exec和execFile都是基于spawn来生成的。

    fork会生成新的Node.js 进程。

    exec和execFile是以新的进程执行新的命令,并且带有callback。他们的区别就在于在windows的环境中,如果要执行.bat或者.cmd文件,没有shell终端是执行不了的。这个时候就只能以exec来启动。execFile是无法执行的。

    或者也可以使用spawn。

    我们看一个在windows中使用spawn和exec的例子:

    // 仅在 Windows 上。
    const { spawn } = require('child_process');
    const bat = spawn('cmd.exe', ['/c', 'my.bat']);
    
    bat.stdout.on('data', (data) => {
      console.log(data.toString());
    });
    
    bat.stderr.on('data', (data) => {
      console.error(data.toString());
    });
    
    bat.on('exit', (code) => {
      console.log(`子进程退出,退出码 ${code}`);
    });
    
    const { exec, spawn } = require('child_process');
    exec('my.bat', (err, stdout, stderr) => {
      if (err) {
        console.error(err);
        return;
      }
      console.log(stdout);
    });
    
    // 文件名中包含空格的脚本:
    const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true });
    // 或:
    exec('"my script.cmd" a b', (err, stdout, stderr) => {
      // ...
    });
    

    同步创建进程

    同步创建进程可以使用child_process.spawnSync()、child_process.execSync() 和 child_process.execFileSync() ,同步的方法会阻塞 Node.js 事件循环、暂停任何其他代码的执行,直到子进程退出。

    通常对于一些脚本任务来说,使用同步创建进程会比较常用。

    本文作者:flydean程序那些事

    本文链接:http://www.flydean.com/nodejs-childprocess/

    本文来源:flydean的博客

    欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    展开全文
  • Windows wmic命令之process进程管理

    千次阅读 2019-12-20 20:53:23
    notepad.exe "C:\WINDOWS\system32\notepad.exe" Win32_Process 20191219174841.511662+480 Win32_ComputerSystem ABERT notepad.exe C:\WINDOWS\system32\notepad.exe 1168 269 1718750 1380 200 notepad.exe Win32...

    之前使用的是linux,对于进程管理特别方便,相较之下,windows的命令行管理进程就不是那么如意,随研究了一番wmic,记录如下,基本就是根据帮助文档来试验的。

    wmic命令总览

    C:\Users\Administrator>wmic /?
    
    WMIC 已弃用。
    
    [全局开关] <命令>
    
    可以使用以下全局开关:
    /NAMESPACE           别名在其上操作的命名空间的路径。
    /ROLE                包含别名定义的角色的路径。
    /NODE                别名在其上操作的服务器。
    /IMPLEVEL            客户端模拟级别。
    /AUTHLEVEL           客户端身份验证级别。
    /LOCALE              客户端应使用的语言 ID。
    /PRIVILEGES          启用或禁用所有权限。
    /TRACE               将调试信息输出到 stderr。
    /RECORD              记录所有输入命令和输出内容。
    /INTERACTIVE         设置或重置交互模式。
    /FAILFAST            设置或重置 FailFast 模式。
    /USER                会话期间要使用的用户。
    /PASSWORD            登录会话时要使用的密码。
    /OUTPUT              指定输出重定向模式。
    /APPEND              指定输出重定向模式。
    /AGGREGATE           设置或重置聚合模式。
    /AUTHORITY           指定连接的 <授权类型>。
    /?[:<BRIEF|FULL>]    用法信息。
    
    有关特定全局开关的详细信息,请键入: switch-name /?
    
    
    当前角色中可以使用以下别名:
    ALIAS                    - 对本地系统上可用别名的访问
    BASEBOARD                - 基板(也称为主板或系统板)管理。
    BIOS                     - 基本输入/输出服务(BIOS)管理。
    BOOTCONFIG               - 启动配置管理。
    CDROM                    - CD-ROM 管理。
    COMPUTERSYSTEM           - 计算机系统管理。
    CPU                      - CPU 管理。
    CSPRODUCT                - SMBIOS 中的计算机系统产品信息。
    DATAFILE                 - 数据文件管理。
    DCOMAPP                  - DCOM 应用程序管理。
    DESKTOP                  - 用户的桌面管理。
    DESKTOPMONITOR           - 桌面监视器管理。
    DEVICEMEMORYADDRESS      - 设备内存地址管理。
    DISKDRIVE                - 物理磁盘驱动器管理。
    DISKQUOTA                - 用于 NTFS 卷的磁盘空间使用量。
    DMACHANNEL               - 直接内存访问(DMA)通道管理。
    ENVIRONMENT              - 系统环境设置管理。
    FSDIR                    - 文件系统目录项管理。
    GROUP                    - 组帐户管理。
    IDECONTROLLER            - IDE 控制器管理。
    IRQ                      - 中断请求线路(IRQ)管理。
    JOB                      - 提供对使用计划服务安排的作业的访问。
    LOADORDER                - 定义执行依赖关系的系统服务的管理。
    LOGICALDISK              - 本地存储设备管理。
    LOGON                    - 登录会话。
    MEMCACHE                 - 缓存内存管理。
    MEMORYCHIP               - 内存芯片信息。
    MEMPHYSICAL              - 计算机系统的物理内存管理。
    NETCLIENT                - 网络客户端管理。
    NETLOGIN                 - 网络登录信息(属于特定用户)管理。
    NETPROTOCOL              - 协议(及其网络特征)管理。
    NETUSE                   - 活动网络连接管理。
    NIC                      - 网络接口控制器(NIC)管理。
    NICCONFIG                - 网络适配器管理。
    NTDOMAIN                 - NT 域管理。
    NTEVENT                  - NT 事件日志中的项目。
    NTEVENTLOG               - NT 事件日志文件管理。
    ONBOARDDEVICE            - 主板(系统板)中内置的通用适配器设备的管理。
    OS                       - 已安装操作系统的管理。
    PAGEFILE                 - 虚拟内存文件交换管理。
    PAGEFILESET              - 页面文件设置管理。
    PARTITION                - 物理磁盘的已分区区域的管理。
    PORT                     - I/O 端口管理。
    PORTCONNECTOR            - 物理连接端口管理。
    PRINTER                  - 打印机设备管理。
    PRINTERCONFIG            - 打印机设备配置管理。
    PRINTJOB                 - 打印作业管理。
    PROCESS                  - 进程管理。
    PRODUCT                  - 安装程序包任务管理。
    QFE                      - 快速修复工程。
    QUOTASETTING             - 卷上的磁盘配额设置信息。
    RDACCOUNT                - 远程桌面连接权限管理。
    RDNIC                    - 对特定网络适配器的远程桌面连接管理。
    RDPERMISSIONS            - 特定远程桌面连接的权限。
    RDTOGGLE                 - 远程打开或关闭远程桌面侦听程序。
    RECOVEROS                - 操作系统出现故障时将从内存收集的信息。
    REGISTRY                 - 计算机系统注册表管理。
    SCSICONTROLLER           - SCSI 控制器管理。
    SERVER                   - 服务器信息管理。
    SERVICE                  - 服务应用程序管理。
    SHADOWCOPY               - 卷影副本管理。
    SHADOWSTORAGE            - 卷影副本存储区域管理。
    SHARE                    - 共享资源管理。
    SOFTWAREELEMENT          - 系统上安装的软件产品元素的管理。
    SOFTWAREFEATURE          - SoftwareElement 的软件产品子集的管理。
    SOUNDDEV                 - 声音设备管理。
    STARTUP                  - 当用户登录到计算机系统时自动运行的命令的管理。
    SYSACCOUNT               - 系统帐户管理。
    SYSDRIVER                - 基本服务的系统驱动程序管理。
    SYSTEMENCLOSURE          - 物理系统外壳管理。
    SYSTEMSLOT               - 物理连接点(包括端口、插槽和外设以及专用连接点)的管理。
    TAPEDRIVE                - 磁带驱动器管理。
    TEMPERATURE              - 温度传感器(电子温度计)数据管理。
    TIMEZONE                 - 时区数据管理。
    UPS                      - 不间断电源(UPS)管理。
    USERACCOUNT              - 用户帐户管理。
    VOLTAGE                  - 电压传感器(电子电压表)数据管理。
    VOLUME                   - 本地存储卷管理。
    VOLUMEQUOTASETTING       - 将磁盘配额设置与特定磁盘卷相关联。
    VOLUMEUSERQUOTA          - 每用户存储卷配额管理。
    WMISET                   - WMI 服务操作参数管理。
    
    有关特定别名的详细信息,请键入: alias /?
    
    CLASS     - 按 Esc 键可获取完整 WMI 架构。
    PATH      - 按 Esc 键可获取完整 WMI 对象路径。
    CONTEXT   - 显示所有全局开关的状态。
    QUIT/EXIT - 退出程序。
    
    有关 CLASS/PATH/CONTEXT 的详细信息,请键入: (CLASS | PATH | CONTEXT) /?

    1.wmic process

    本文主要介绍 wmic process 命令的使用

    C:\Users\Administrator>wmic process  /?
    
    PROCESS - 进程管理。
    
    提示: BNF 的别名用法。
    (<别名> [WMI 对象] | <别名> [<路径 where>] | [<别名>] <路径 where>) [<谓词子句>]。
    
    用法:
    
    PROCESS ASSOC [<格式说明符>]
    PROCESS CALL <方法名称> [<实际参数列表>]
    PROCESS CREATE <分配列表>
    PROCESS DELETE
    PROCESS GET [<属性列表>] [<获取开关>]
    PROCESS LIST [<列表格式>] [<列表开关>]

    wmic process 不加参数显示所有的进程和所有信息,从Caption列到WriteTransferCount列,共计45列。

    这里只选取了两个进程来展示,当然不是所有的进程都有每列对应的信息。

    C:\Users\Administrator>wmic process
    Caption        CommandLine                                        CreationClassName  CreationDate               CSCreationClassName   CSName  Description       ExecutablePath                                   ExecutionState  Handle  HandleCount  InstallDate  KernelModeTime  MaximumWorkingSetSize  MinimumWorkingSetSize  Name           OSCreationClassName    OSName                                                               OtherOperationCount  OtherTransferCount  PageFaults  PageFileUsage  ParentProcessId  PeakPageFileUsage  PeakVirtualSize  PeakWorkingSetSize  Priority  PrivatePageCount  ProcessId  QuotaNonPagedPoolUsage  QuotaPagedPoolUsage  QuotaPeakNonPagedPoolUsage  QuotaPeakPagedPoolUsage  ReadOperationCount  ReadTransferCount  SessionId  Status  TerminationDate  ThreadCount  UserModeTime  VirtualSize    WindowsVersion  WorkingSetSize  WriteOperationCount  WriteTransferCount 
    notepad.exe    "C:\WINDOWS\system32\notepad.exe"                  Win32_Process      20191219174841.511662+480  Win32_ComputerSystem  ABERT   notepad.exe       C:\WINDOWS\system32\notepad.exe                                  1168    269                       1718750         1380                   200                    notepad.exe    Win32_OperatingSystem  Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  1167                 11874               5509        5172           10120            5520               2203497086976    18428               8         5296128           1168       20                      250                  21                          262                      2                   18539              1                                   4            468750        2203489005568  10.0.18362      18817024        0                    0                  
    notepad++.exe  "C:\Program Files (x86)\Notepad++\notepad++.exe"   Win32_Process      20191219175123.741545+480  Win32_ComputerSystem  ABERT   notepad++.exe     C:\Program Files (x86)\Notepad++\notepad++.exe                   8764    438                       74531250        1380                   200                    notepad++.exe  Win32_OperatingSystem  Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  3818                 42922               12980       22048          10120            23724              215113728        38316               8         22577152          8764       36                      350                  37                          362                      170                 2242184            1                                   6            52812500      208207872      10.0.18362      38113280        0                    0                  
    ...

    我们可以使用where关键字来过滤某个特定的进程,如我们知道进程名为notepad.exe

    C:\Users\Administrator>wmic process where Caption='notepad.exe'
    Caption      CommandLine                        CreationClassName  CreationDate               CSCreationClassName   CSName  Description  ExecutablePath                   ExecutionState  Handle  HandleCount  InstallDate  KernelModeTime  MaximumWorkingSetSize  MinimumWorkingSetSize  Name         OSCreationClassName    OSName                                                               OtherOperationCount  OtherTransferCount  PageFaults  PageFileUsage  ParentProcessId  PeakPageFileUsage  PeakVirtualSize  PeakWorkingSetSize  Priority  PrivatePageCount  ProcessId  QuotaNonPagedPoolUsage  QuotaPagedPoolUsage  QuotaPeakNonPagedPoolUsage  QuotaPeakPagedPoolUsage  ReadOperationCount  ReadTransferCount  SessionId  Status  TerminationDate  ThreadCount  UserModeTime  VirtualSize    WindowsVersion  WorkingSetSize  WriteOperationCount  WriteTransferCount
    notepad.exe  "C:\WINDOWS\system32\notepad.exe"  Win32_Process      20191219174841.511662+480  Win32_ComputerSystem  ABERT   notepad.exe  C:\WINDOWS\system32\notepad.exe                  1168    269                       1718750         1380                   200                    notepad.exe  Win32_OperatingSystem  Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  1167                 11874               5510        5172           10120            5520               2203497086976    18428               8         5296128           1168       20                      250                  21                          262                      2                   18539              1                                   4            468750        2203489005568  10.0.18362      18812928        0                    0
    

    转换成纵向更好观看

    Caption                    notepad.exe
    CommandLine                "C:\WINDOWS\system32\notepad.exe"
    CreationClassName          Win32_Process
    CreationDate               20191219162607.799514+480
    CSCreationClassName        Win32_ComputerSystem
    CSName                     ABERT
    Description                notepad.exe
    ExecutablePath             C:\WINDOWS\system32\notepad.exe
    ExecutionState             
    Handle                     13132
    HandleCount                279
    InstallDate                
    KernelModeTime             1718750
    MaximumWorkingSetSize      1380
    MinimumWorkingSetSize      200
    Name                       notepad.exe
    OSCreationClassName        Win32_OperatingSystem
    OSName                     Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1
    OtherOperationCount        1139
    OtherTransferCount         11842
    PageFaults                 5461
    PageFileUsage              6000
    ParentProcessId            10524
    PeakPageFileUsage          6000
    PeakVirtualSize            2203497086976
    PeakWorkingSetSize         18728
    Priority                   8
    PrivatePageCount           6144000
    ProcessId                  13132
    QuotaNonPagedPoolUsage     21
    QuotaPagedPoolUsage        250
    QuotaPeakNonPagedPoolUsage 21
    QuotaPeakPagedPoolUsage    262
    ReadOperationCount         2
    ReadTransferCount          17864
    SessionId                  1
    Status                     
    TerminationDate            
    ThreadCount                8
    UserModeTime               781250
    VirtualSize                2203491102720
    WindowsVersion             10.0.18362
    WorkingSetSize             19156992
    WriteOperationCount        0
    WriteTransferCount         0

    2.wmic process list

    我们以process list(属性列表操作) 命令为例进行讲解

    wmic process list 不加参数,默认打印所有的CommandLine列到WriteTransferCount列,共计40列。与前面直接使用wmic process 展示的45列相比,少了如下5列。

    Caption
    CreationClassName
    CreationDate
    CSCreationClassName
    OSCreationClassName

    C:\Users\Administrator>wmic process list
    CommandLine                                                       CSName  Description      ExecutablePath                        ExecutionState  Handle  HandleCount  InstallDate  KernelModeTime  MaximumWorkingSetSize  MinimumWorkingSetSize  Name              OSName                                                               OtherOperationCount  OtherTransferCount  PageFaults  PageFileUsage  ParentProcessId  PeakPageFileUsage  PeakVirtualSize  PeakWorkingSetSize  Priority  PrivatePageCount  ProcessId  QuotaNonPagedPoolUsage  QuotaPagedPoolUsage  QuotaPeakNonPagedPoolUsage  QuotaPeakPagedPoolUsage  ReadOperationCount  ReadTransferCount  SessionId  Status  TerminationDate  ThreadCount  UserModeTime  VirtualSize    WindowsVersion  WorkingSetSize  WriteOperationCount  WriteTransferCount
                                                                      ABERT   services.exe                                                           884     851                       70781250                                                      services.exe      Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  17942                194666              24419       6100           812              8108               2203437035520    21524               9         6246400           884        12                      180                  19                          215                      2795                908712             0                                   8            18593750      2203385245696  10.0.18362      11182080        1                    160
    C:\WINDOWS\system32\lsass.exe                                     ABERT   lsass.exe        C:\WINDOWS\system32\lsass.exe                         904     1594                      39843750        1380                   200                    lsass.exe         Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  26557                1795723             11315       8276           812              8736               2203419828224    20004               9         8474624           904        29                      152                  33                          157                      4264                2932158            0                                   8            25781250      2203417669632  10.0.18362      20156416        1162                 447449
    winlogon.exe                                                      ABERT   winlogon.exe     C:\WINDOWS\system32\winlogon.exe                      952     282                       1562500         1380                   200                    winlogon.exe      Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  579                  200918              6128        3232           804              4484               2203429298176    18324               13        3309568           952        18                      148                  19                          159                      65                  209250             1                                   7            625000        2203422507008  10.0.18362      12677120        0                    0
    C:\WINDOWS\system32\svchost.exe -k DcomLaunch -p -s PlugPlay      ABERT   svchost.exe      C:\WINDOWS\system32\svchost.exe                       652     113                       312500          1380                   200                    svchost.exe       Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  64                   430                 2030        1648           884              2832               2203391688704    6028                8         1687552           652        12                      60                   12                          66                       0                   0                  0                                   2            0             2203388182528  10.0.18362      5910528         0                    0
    C:\WINDOWS\system32\svchost.exe -k DcomLaunch -p                  ABERT   svchost.exe      C:\WINDOWS\system32\svchost.exe                       664     1234                      40937500        1380                   200                    svchost.exe       Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  13913                384159              26780       13628          884              14504              2203492900864    38172               8         13955072          664        29                      662                  33                          669                      1194                75026              0                                   21           8593750       2203474505728  10.0.18362      33574912        3                    97832
    "fontdrvhost.exe"                                                 ABERT   fontdrvhost.exe  C:\WINDOWS\system32\fontdrvhost.exe                   892     33                        8906250         1380                   200                    fontdrvhost.exe   Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  8303                 1292684             1339        2300           812              4460               2203428683776    4512                8         2355200           892        6                       108                  7                           108                      1                   66082              0                                   5            156250        2203425009664  10.0.18362      4419584         0                    0
    "fontdrvhost.exe"                                                 ABERT   fontdrvhost.exe  C:\WINDOWS\system32\fontdrvhost.exe                   824     33                        15468750        1380                   200                    fontdrvhost.exe   Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  8328                 1295812             5264        4908           952              4952               2203533037568    15992               8         5025792           824        9                       270                  10                          309                      1                   66082              1                                   5            13906250      2203512152064  10.0.18362      16359424        0                    0
    C:\WINDOWS\system32\svchost.exe -k RPCSS -p                       ABERT   svchost.exe      C:\WINDOWS\system32\svchost.exe                       1052    1402                      75781250        1380                   200                    svchost.exe       Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  4109                 255745              29082       10096          884              10668              2203464146944    18092               8         10338304          1052       24                      183                  30                          225                      17                  8704               0                                   15           66562500      2203423059968  10.0.18362      17932288        0                    0
    C:\WINDOWS\system32\svchost.exe -k DcomLaunch -p -s LSM           ABERT   svchost.exe      C:\WINDOWS\system32\svchost.exe                       1108    389                       15000000        1380                   200                    svchost.exe       Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  205                  968                 4249        3796           884              4120               2203414343680    12024               8         3887104           1108       17                      126                  19                          127                      0                   0                  0                                   8            7343750       2203406204928  10.0.18362      11943936        0                    0
    "dwm.exe"                                                         ABERT   dwm.exe          C:\WINDOWS\system32\dwm.exe                           1176    1034                      132500000       1380                   200                    dwm.exe           Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  1762                 41986               200751      71276          952              109816             2203878887424    142720              13        72986624          1176       50                      754                  59                          794                      37                  30992              1                                   18           165312500     2203828015104  10.0.18362      106606592       37                   652
    C:\WINDOWS\System32\svchost.exe -k NetworkService -s TermService  ABERT   svchost.exe      C:\WINDOWS\System32\svchost.exe                       1256    495                       6718750         1380                   200                    svchost.exe       Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk0\Partition1  598                  5620                6883        4932           884              6096               2203455123456    13712               8         5050368           1256       23                      142                  24                          174                      0                   0                  0                                   26           1875000       2203435368448  10.0.18362      13484032        0                    0
    ...

    wmic process list 也可以使用 where关键字来限定条件,但是需要将where句子放在process和list之间

    C:\Users\Administrator>wmic process  where Name='notepad.exe' list
    CommandLine                        CSName  Description  ExecutablePath                   ExecutionState  Handle  HandleCount  InstallDate  KernelModeTime  MaximumWorkingSetSize  MinimumWorkingSetSize  Name         OSName                                                               OtherOperationCount  OtherTransferCount  PageFaults  PageFileUsage  ParentProcessId  PeakPageFileUsage  PeakVirtualSize  PeakWorkingSetSize  Priority  PrivatePageCount  ProcessId  QuotaNonPagedPoolUsage  QuotaPagedPoolUsage  QuotaPeakNonPagedPoolUsage  QuotaPeakPagedPoolUsage  ReadOperationCount  ReadTransferCount  SessionId  Status  TerminationDate  ThreadCount  UserModeTime  VirtualSize    WindowsVersion  WorkingSetSize  WriteOperationCount  WriteTransferCount
    "C:\WINDOWS\system32\notepad.exe"  ABERT   notepad.exe  C:\WINDOWS\system32\notepad.exe                  1168    269                       1718750         1380                   200                    notepad.exe  Microsoft Windows 10 专业 版|C:\WINDOWS|\Device\Harddisk0\Partition1  1167                 11874               5511        5172           10120            5520               2203497086976    18428               8         5296128           1168       20                      250                  21                          262                      2                   18539              1                                   4            468750        2203489005568  10.0.18362      15728640        0                    0
    

    wmic process list 的帮助文档如下:

    C:\Users\Administrator>wmic process  list /?
    
    属性列表操作。
    用法:
    
    LIST [<列表格式>] [<列表开关>]
    
    可以使用以下 LIST 格式:
    
    BRIEF -      ThreadCount,
                 HandleCount,
                 Name,
                 Priority,
                 ProcessId
    
    FULL -       CommandLine,
                 CSName,
                 Description,
                 ExecutablePath,
                 ExecutionState,
                 Handle,
                 HandleCount,
                 InstallDate,
                 KernelModeTime,
                 MaximumWorkingSetSize,
                 MinimumWorkingSetSize,
                 Name,
                 OSName,
                 OtherOperationCount,
                 OtherTransferCount,
                 PageFaults,
                 PageFileUsage,
                 ParentProcessId,
                 PeakPageFileUsage,
                 PeakVirtualSize,
                 PeakWorkingSetSize,
                 Priority,
                 PrivatePageCount,
                 ProcessId,
                 QuotaNonPagedPoolUsage,
                 QuotaPagedPoolUsage,
                 QuotaPeakNonPagedPoolUsage,
                 QuotaPeakPagedPoolUsage,
                 ReadOperationCount,
                 ReadTransferCount,
                 SessionId,
                 Status,
                 TerminationDate,
                 ThreadCount,
                 UserModeTime,
                 VirtualSize,
                 WindowsVersion,
                 WorkingSetSize,
                 WriteOperationCount,
                 WriteTransferCount
    
    INSTANCE -   __PATH
    
    IO -         Name,
                 ProcessId,
                 ReadOperationCount,
                 ReadTransferCount,
                 WriteOperationCount,
                 WriteTransferCount
    
    MEMORY -     Handle,
                 MaximumWorkingSetSize,
                 MinimumWorkingSetSize,
                 Name,
                 PageFaults,
                 PageFileUsage,
                 PeakPageFileUsage,
                 PeakVirtualSize,
                 PeakWorkingSetSize,
                 PrivatePageCount,
                 QuotaNonPagedPoolUsage,
                 QuotaPagedPoolUsage,
                 QuotaPeakNonPagedPoolUsage,
                 QuotaPeakPagedPoolUsage,
                 VirtualSize,
                 WorkingSetSize
    
    STATISTICS - HandleCount,
                 Name,
                 KernelModeTime,
                 MaximumWorkingSetSize,
                 MinimumWorkingSetSize,
                 OtherOperationCount,
                 OtherTransferCount,
                 PageFaults,
                 PageFileUsage,
                 PeakPageFileUsage,
                 PeakVirtualSize,
                 PeakWorkingSetSize,
                 PrivatePageCount,
                 ProcessId,
                 QuotaNonPagedPoolUsage,
                 QuotaPagedPoolUsage,
                 QuotaPeakNonPagedPoolUsage,
                 QuotaPeakPagedPoolUsage,
                 ReadOperationCount,
                 ReadTransferCount,
                 ThreadCount,
                 UserModeTime,
                 VirtualSize,
                 WorkingSetSize,
                 WriteOperationCount,
                 WriteTransferCount
    
    STATUS -     Status,
                 Name,
                 ProcessId
    
    SYSTEM -     __CLASS,
                 __DERIVATION,
                 __DYNASTY,
                 __GENUS,
                 __NAMESPACE,
                 __PATH,
                 __PROPERTY_COUNT,
                 __RELPATH,
                 __SERVER,
                 __SUPERCLASS
    
    可以使用以下 LIST 开关:
    
    /TRANSLATE:<table name>      - Translate output via values from <table name>.
    /EVERY:<间隔> [/REPEAT:<重复计数>] - 如果 /REPEAT 已指定命令执行 <重复计数> 次,则每(X 间隔)秒返回值。
    /FORMAT:<格式说明符>   - 处理 XML 结果的关键字/XSL 文件名。
    
    注意: /TRANSLATE 和 /FORMAT 开关的顺序会影响输出外观。
    第一种情况: 如果 /TRANSLATE 位于 /FORMAT 之前,则编排格式会跟在结果转换之后。
    第二种情况: 如果 /TRANSLATE 位于 /FORMAT 之后,则转换已编排了格式的结果。

    可以看到,wmic process list   [ brief | full | instance | io | memory | statistics | status | system  ] 

    list 后面可以如上方括号终端内容,他们分别是将list的40列做了一个分类,以及一些额外的属性。

    通过进程名查看父进程ID,如查看notepad.exe进程,打印brief。

    C:\Users\Administrator>wmic process  where Name='notepad.exe' list BRIEF
    HandleCount  Name         Priority  ProcessId  ThreadCount  WorkingSetSize
    269          notepad.exe  8         1168       4            15577088

    3.wmic process get

    查看get的帮助文档,可以看到get可以使用的属性有如下40个,其实他就是对应了前面wmic process list打印的40列。

    C:\Users\Administrator>wmic process get /?
    
    属性获取操作。
    用法:
    
    GET [<属性列表>] [<获取开关>]
    注意: <属性列表> ::= <属性名称> | <属性名称>,  <属性列表>
    
    可以使用以下属性:
    属性                            类型                    操作
    ========                                ====                    =========
    CSName                                  N/A                     N/A
    CommandLine                             N/A                     N/A
    Description                             N/A                     N/A
    ExecutablePath                          N/A                     N/A
    ExecutionState                          N/A                     N/A
    Handle                                  N/A                     N/A
    HandleCount                             N/A                     N/A
    InstallDate                             N/A                     N/A
    KernelModeTime                          N/A                     N/A
    MaximumWorkingSetSize                   N/A                     N/A
    MinimumWorkingSetSize                   N/A                     N/A
    Name                                    N/A                     N/A
    OSName                                  N/A                     N/A
    OtherOperationCount                     N/A                     N/A
    OtherTransferCount                      N/A                     N/A
    PageFaults                              N/A                     N/A
    PageFileUsage                           N/A                     N/A
    ParentProcessId                         N/A                     N/A
    PeakPageFileUsage                       N/A                     N/A
    PeakVirtualSize                         N/A                     N/A
    PeakWorkingSetSize                      N/A                     N/A
    Priority                                N/A                     N/A
    PrivatePageCount                        N/A                     N/A
    ProcessId                               N/A                     N/A
    QuotaNonPagedPoolUsage                  N/A                     N/A
    QuotaPagedPoolUsage                     N/A                     N/A
    QuotaPeakNonPagedPoolUsage              N/A                     N/A
    QuotaPeakPagedPoolUsage                 N/A                     N/A
    ReadOperationCount                      N/A                     N/A
    ReadTransferCount                       N/A                     N/A
    SessionId                               N/A                     N/A
    Status                                  N/A                     N/A
    TerminationDate                         N/A                     N/A
    ThreadCount                             N/A                     N/A
    UserModeTime                            N/A                     N/A
    VirtualSize                             N/A                     N/A
    WindowsVersion                          N/A                     N/A
    WorkingSetSize                          N/A                     N/A
    WriteOperationCount                     N/A                     N/A
    WriteTransferCount                      N/A                     N/A
    
    可以使用以下 GET 开关:
    
    /VALUE                       - 返回值。
    /ALL(默认)                - 返回属性的数据和元数据。
    /TRANSLATE:<table name>      - Translate output via values from <table name>.
    /EVERY:<间隔> [/REPEAT:<重复计数>] - 如果 /REPEAT 已指定命令执行 <重复计数> 次,则每(X 间隔)秒返回值。
    /FORMAT:<格式说明符>   - 处理 XML 结果的关键字/XSL 文件名。
    
    注意: /TRANSLATE 和 /FORMAT 开关的顺序会影响输出外观。
    第一种情况: 如果 /TRANSLATE 位于 /FORMAT 之前,则编排格式会跟在结果转换之后。
    第二种情况: 如果 /TRANSLATE 位于 /FORMAT 之后,则转换已编排了格式的结果。
    

    如,我们利用get获取某个进程的父进程ID   ParentProcessId:

    C:\Users\Administrator>wmic process where Name="notepad.exe" get ParentProcessId
    ParentProcessId
    10120

     如,获取某个进程的命令行全路径CommandLine:

    C:\Users\Administrator>wmic process where Name="notepad.exe" get CommandLine
    CommandLine
    "C:\WINDOWS\system32\notepad.exe"

    我们还可以同时获取多个属性,使用逗号“,”分隔开(列的先后顺序是按ASCII排序的):

    C:\Users\Administrator>wmic process  where Name='notepad.exe'  get ProcessId,ParentProcessId,SessionId,Name
    Name         ParentProcessId  ProcessId  SessionId
    notepad.exe  10120            1168       1

    其他命令ASSOC,CALL,CREATE,DELETE,就暂时不介绍了,因为一般也没用到。

     

     

     

     

    展开全文
  • NodeJS之process对象

    千次阅读 2019-10-26 16:23:45
    文章目录1 process简介1.1 进程信息1.2 退出码2 属性2.1 stdout,stdin,stderr2.1.1 stdout2.1.2 stdin2.1.3 stderr2.2 argv,execPath,execArgv2.3 process.env3 方法3.1 process.cwd(),process.chdir()3.2 ...

    1 process简介

    process对象是Node的一个全局对象,提供当前Node进程的信息。它可以在脚本的任意位置使用,不必通过require命令加载。该对象部署了EventEmitter接口。

    1.1 进程信息

    通过process对象,可以获知当前进程的很多信息。

    1.2 退出码

    进程退出时,会返回一个整数值,表示退出时的状态。这个整数值就叫做退出码。下面是常见的Node进程退出码。

    • 0,正常退出
    • 1,发生未捕获错误
    • 5,V8执行错误
    • 8,不正确的参数
    • 128 + 信号值,如果Node接受到退出信号(比如SIGKILL或SIGHUP),它的退出码就是128加上信号值。由于128的二进制形式是10000000, 所以退出码的后七位就是信号值。

    2 属性

    process对象提供一系列属性,用于返回系统信息。

    • process.argv:返回当前进程的命令行参数数组。
    • process.env:返回一个对象,成员为当前Shell的环境变量,比如process.env.HOME。
    • process.installPrefix:node的安装路径的前缀,比如/usr/local,则node的执行文件目录为/usr/local/bin/node。
    • process.pid:当前进程的进程号。
    • process.platform:当前系统平台,比如Linux。
    • process.title:默认值为“node”,可以自定义该值。
    • process.version:Node的版本,比如v0.10.18。
      下面是主要属性的介绍

    2.1 stdout,stdin,stderr

    以下属性指向系统IO

    2.1.1 stdout

    stdout属性指向标准输出(文件描述符1)。它的write方法等同于console.log,可用在标准输出向用户显示内容。

    console.log = function(d) {
      process.stdout.write(d + '\n');
    };
    

    下面代码表示将一个文件导向标准输出

    var fs = require('fs');
    
    fs.createReadStream('wow.txt')
      .pipe(process.stdout);
    

    上面代码中,由于process.stdout和process.stdin与其他进程的通信,都是流(stream)形式,所以必须通过pipe管道命令中介。

    var fs = require('fs');
    var zlib = require('zlib');
    
    fs.createReadStream('wow.txt')
      .pipe(zlib.createGzip())
      .pipe(process.stdout);
    

    上面代码通过pipe方法,先将文件数据压缩,然后再导向标准输出。

    2.1.2 stdin

    stdin代表标准输入(文件描述符0)。

    process.stdin.pipe(process.stdout)
    

    上面代码表示将标准输入导向标准输出。
    由于stdin和stdout都部署了stream接口,所以可以使用stream接口的方法。

    process.stdin.setEncoding('utf8');
    
    process.stdin.on('readable', function() {
      var chunk = process.stdin.read();
      if (chunk !== null) {
        process.stdout.write('data: ' + chunk);
      }
    });
    
    process.stdin.on('end', function() {
      process.stdout.write('end');
    });
    

    2.1.3 stderr

    stderr属性指向标准错误(文件描述符2)。

    2.2 argv,execPath,execArgv

    • argv属性返回一个数组,由命令行执行脚本时的各个参数组成。
    • 它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数
      请看下面的例子,新建一个脚本文件argv.js
    // argv.js
    console.log("argv: ",process.argv);
    

    在命令行下调用这个脚本,会得到以下结果。

    $ node argv.js a b c
    [ 'node', '/path/to/argv.js', 'a', 'b', 'c' ]
    

    上面代码表示,argv返回数组的成员依次是命令行的各个部分,真正的参数实际上是从process.argv[2]开始。要得到真正的参数部分,可以把argv.js改写成下面这样。

    // argv.js
    var myArgs = process.argv.slice(2);
    console.log(myArgs);
    

    execPath属性返回执行当前脚本的Node二进制文件的绝对路径。

    > process.execPath
    '/usr/local/bin/node'
    >
    

    execArgv属性返回一个数组,成员是命令行下执行脚本时,在Node可执行文件与脚本文件之间的命令行参数。

    # script.js的代码为
    # console.log(process.execArgv);
    $ node --harmony script.js --version
    

    2.3 process.env

    process.env属性返回一个对象,包含了当前Shell的所有环境变量
    通常的做法是,新建一个环境变量NODE_ENV,用它确定当前所处的开发阶段,生产阶段设为production,开发阶段设为develop或staging,然后在脚本中读取process.env.NODE_ENV即可
    运行脚本时,改变环境变量,可以采用下面的写法

    $ export NODE_ENV=production && node app.js
    

    3 方法

    process对象提供以下方法:

    • process.chdir():切换工作目录到指定目录。
    • process.cwd():返回运行当前脚本的工作目录的路径。
    • process.exit():退出当前进程。
    • process.getgid():返回当前进程的组ID(数值)。
    • process.getuid():返回当前进程的用户ID(数值)。
    • process.nextTick():指定回调函数在当前执行栈的尾部、下一次Event Loop之前执行。
    • process.on():监听事件。
    • process.setgid():指定当前进程的组,可以使用数字ID,也可以使用字符串ID。
    • process.setuid():指定当前进程的用户,可以使用数字ID,也可以使用字符串ID。

    3.1 process.cwd(),process.chdir()

    cwd方法返回进程的当前目录,chdir方法用来切换目录。

    > process.cwd()
    '/home/aaa'
    
    > process.chdir('/home/bbb')
    > process.cwd()
    '/home/bbb'
    

    3.2 process.nextTick()

    process.nextTick将任务放到当前一轮事件循环(Event Loop)的尾部。

    process.nextTick(function () {
      console.log('下一次Event Loop即将开始!');
    });
    

    上面代码可以用setTimeout(f,0)改写,效果接近,但是原理不同。

    setTimeout(function () {
      console.log('已经到了下一轮Event Loop!');
    }, 0)
    

    setTimeout(f,0)是将任务放到下一轮事件循环的头部,因此nextTick会比它后执行。另外,nextTick的效率更高,因为不用检查是否到了指定时间。
    根据Node的事件循环的实现,基本上,进入下一轮事件循环后的执行顺序如下。

    1. setTimeout(f,0)
    2. 各种到期的回调函数
    3. process.nextTick

    3.3 process.exit()

    process.exit方法用来退出当前进程,它可以接受一个数值参数。如果参数大于0,表示执行失败;如果等于0表示执行成功。

    if (err) {
      process.exit(1);
    } else {
      process.exit(0);
    }
    

    process.exit()执行时,会触发exit事件。

    3.4 process.on()

    process.on方法用来监听各种事件,并指定回调函数。

    process.on('uncaughtException', function(err){
      console.log('got an error: %s', err.message);
      process.exit(1);
    });
    
    setTimeout(function(){
      throw new Error('fail');
    }, 100);
    

    上面代码是process监听Node的一个全局性事件uncaughtException,只要有错误没有捕获,就会触发这个事件。
    process支持的事件有以下一些。

    • data事件:数据输出输入时触发
    • SIGINT事件:接收到系统信号时触发
    process.on('SIGINT', function () {
      console.log('Got a SIGINT. Goodbye cruel world');
      process.exit(0);
    });
    

    使用时,向该进程发出系统信号,就会导致进程退出。

    $ kill -s SIGINT [process_id]
    

    SIGTERM信号表示内核要求当前进程停止,进程可以自行停止,也可以忽略这个信号。

    var http = require('http');
    var server = http.createServer(function (req, res) {
    });
    
    process.on('SIGTERM', function () {
      server.close(function () {
        process.exit(0);
      });
    });
    

    上面代码表示,进程接到SIGTERM信号之后,关闭服务器,然后退出进程。需要注意的是,这时进程不会马上退出,而是要回应完最后一个请求,处理完所有回调函数,然后再退出。

    3.5 process.kill()

    process.kill方法用来对指定ID的线程发送信号,默认为SIGINT信号。

    process.on('SIGTERM', function(){
        console.log('terminating');
        process.exit(1);
    });
    
    setTimeout(function(){
        console.log('sending SIGTERM to process %d', process.pid);
        process.kill(process.pid, 'SIGTERM');
    }, 500);
    
    setTimeout(function(){
        console.log('never called');
    }, 1000);
    

    上面代码中,500毫秒后向当前进程发送SIGTERM信号(终结进程),因此1000毫秒后的指定事件不会被触发。

    4 事件

    4.1 exit事件

    当前进程退出时,会触发exit事件,可以对该事件指定回调函数。

    process.on('exit', function () {
      fs.writeFileSync('/tmp/myfile', '需要保存到硬盘的信息');
    });
    

    下面是一个例子,进程退出时,显示一段日志。

    process.on("exit", code =>
      console.log("exiting with code: " + code))
    

    注意,此时回调函数只能执行同步操作,不能包含异步操作,因为执行完回调函数,进程就会退出,无法监听到回调函数的操作结果。

    process.on('exit', function(code) {
      // 不会执行
      setTimeout(function() {
        console.log('This will not run');
      }, 0);
    });
    

    上面代码在exit事件的回调函数里面,指定了一个下一轮事件循环,所要执行的操作。这是无效的,不会得到执行。

    4.2 beforeExit事件

    beforeExit事件在Node清空了Event Loop以后,再没有任何待处理的任务时触发。正常情况下,如果没有任何待处理的任务,Node进程会自动退出,设置beforeExit事件的监听函数以后,就可以提供一个机会,再部署一些任务,使得Node进程不退出。
    beforeExit事件与exit事件的主要区别是,beforeExit的监听函数可以部署异步任务,而exit不行。
    此外,如果是显式终止程序(比如调用process.exit()),或者因为发生未捕获的错误,而导致进程退出,这些场合不会触发beforeExit事件。因此,不能使用该事件替代exit事件。

    4.3 uncaughtException事件

    当前进程抛出一个没有被捕捉的错误时,会触发uncaughtException事件。

    process.on('uncaughtException', function (err) {
      console.error('An uncaught error occurred!');
      console.error(err.stack);
      throw new Error('未捕获错误');
    });
    

    部署uncaughtException事件的监听函数,是免于Node进程终止的最后措施,否则Node就要执行process.exit()。出于除错的目的,并不建议发生错误后,还保持进程运行。
    抛出错误之前部署的异步操作,还是会继续执行。只有完成以后,Node进程才会退出。

    process.on('uncaughtException', function(err) {
      console.log('Caught exception: ' + err);
    });
    
    setTimeout(function() {
      console.log('本行依然执行');
    }, 500);
    
    // 下面的表达式抛出错误
    nonexistentFunc();
    

    上面代码中,抛出错误之后,此前setTimeout指定的回调函数亦然会执行。

    4.4 信号事件

    操作系统内核向Node进程发出信号,会触发信号事件。实际开发中,主要对SIGTERMSIGINT信号部署监听函数,这两个信号在非Windows平台会导致进程退出,但是只要部署了监听函数,Node进程收到信号后就不会退出。

    // 读取标准输入,这主要是为了不让当前进程退出
    process.stdin.resume();
    process.on('SIGINT', function() {
      console.log('SIGINT信号,按Control-D退出');
    });
    

    上面代码部署了SIGINT信号的监听函数,当用户按下Ctrl-C后,会显示提示文字

    展开全文
  • PROCESS插件安装及使用

    千次阅读 2020-12-23 03:12:55
    Hayes基于SPSS和SAS的中介和调节效应分析程序,开发了用于进行中介和调节效应分析的插件PROCESS,下面将从PROCESS插件的安装,使用和优缺点三个方面对这一插件进行简单介绍。 一、PROCESS插件的安装 有三种方式安装...
  • C# Process.Start()方法详解

    万次阅读 2019-06-14 23:42:55
    System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下几个功能: 1、打开某个链接网址(弹窗)。 2、定位打开某个文件目录。 3、打开系统特殊文件夹,如“控制面板”等。 那么它是怎么实现这几个功能...
  • nodejs--process对象

    千次阅读 2018-11-19 20:36:21
    文章目录前言process对象 前言 相信前端开发的同学看到下面这些命令都会很熟悉吧: npm start npm build ... 这其实是执行了start脚本,build脚本,在项目代码中我们也可以看到这些脚本的代码 下面是我的项目中的...
  • [知识小节]Process Monitor介绍

    千次阅读 2021-03-05 13:53:47
    Process Monitor1、工具基本介绍2、使用场景3、常见用法4、实例分析 1、工具基本介绍 Process Monitor是微软推荐的一款系统监视攻击,能供实时显示文件系统、注册表、网络连接于进程活动的攻击工具。它整合了一些...
  • Process.myPid()、Process.myTid()和Process.myUid()这几个方法分别表示什么含义? PID全称为:Process Identifier,亦即进程ID。一个app中可以有多个进程,有个默认进程,称为主进程。 TID全称为:Thread ...
  • Process terminated

    万次阅读 2021-03-05 11:29:14
    idea点击maven下的... 解决方法:更换maven进行重新配置 1、环境变量中找到MAVEN_HOME,修改新Maven的存放路径 2、修改maven相关配置 方法一:如下图 方法二:File --》 settings (快捷键:Ctrl +Alt+S) ......
  • 1、启动外部程序:Process.Start();及其多个重载; 2、接收传参:Environment.GetCommandLineArgs(); 3、关闭程序: Process.GetCurrentProcess().Kill(); 关闭自身 Path.GetFileNameWithoutExtension(Process....
  • process exporter 监控进程并告警

    千次阅读 热门讨论 2021-02-02 18:44:44
    process-exporter介绍: 在 prometheus 中,process-exporter 可以用来检测所选进程的存活状态。 用法: process-exporter [options] -config.path filename.yml 如果选择监控的进程并将其分组,可以提供命令行...
  • 准备开发一个flutter的项目,在环境搭建完成,新建后第一次执行时,问题来了,这里做个记录分享解决...Finished with error: ProcessException: Process "F:\zy\httpd\flutter_app\android\gradlew.bat" exited abno...
  • Process Simulate

    千次阅读 2021-03-07 21:36:42
    Process Simulate 中线仿真下无法保存文件 当我们在用西门子Process Simulate软件时,发现在线仿真状态下虚拟调试吼后,无法保存项目,如下图所示: 看看操作树(Operation Tree)中是否有一下情况:即出现已有操作...
  • ProcessOn画斜箭头、写公式方法记录

    千次阅读 多人点赞 2021-06-19 20:45:30
    画图工具ProcessOn的箭头类型切换 ;使用ProcessOn编辑简单公式
  • child_process 子进程

    千次阅读 2020-08-17 11:33:25
    child_process 子进程 在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。熟悉shell脚本的同学,可以用它来完成很多有意思的事情,比如文件压缩、增量部署等,nodejs创建子...
  • Render process gone

    千次阅读 2021-01-14 08:59:44
    js报错Render process gone Render process gone 处理:可能由于代码死循环啥的,使用任务管理器先杀掉运行的该程序,再检查代码是否死循环。
  • Process 进程 与 child_process 子进程参考 Node.js 文档 JavaScript 标准参考教程 Node.js 1. Process 进程说明 process 对象是 Node 的一个全局对象,提供当前 Node 进程的信息,他可以在脚本的任意位置使用,...
  • ProcessOn 数据恢复

    千次阅读 2019-01-19 11:00:22
    周六早晨上班,同事说 ProcessOn 上面的一个思维导图打不开了(一直转圈儿,没有任何内容),这是一个非常重要的思维导图,如果真出现问题,可能以后都不敢用 ProcessOn 了。我同事自己先和客服联系,由于他们周末不...
  • process information unavailable解决办法

    千次阅读 2022-03-20 19:56:28
    jps进程出现process information unavailabl问题
  • Process Monitor中文手册

    千次阅读 2018-03-25 16:08:37
    使用Process Monitor3.列的选择4.过滤和高亮5. 进程树(The Process Tree)6. 信息概要工具(Trace Summary Tools)7. 选项8. 保存和记录(Saving and Logging)9. 启动记录10. 配置的导入和导出11. 命令行选项12. ...
  • SPSS的Process插件下载和安装

    千次阅读 2020-12-23 03:12:56
    SPSS的Process插件由 Andrew F. Hayes, Ph.D 开发, 大家可以免费使用。Process的主要用途就是进行一些路径分析, 比如中介效应/调节效应的检验, 不过, 其实没有这个插件, 我们也能进行这些分析, 有了Process插件的...
  • Process插件安装及其简单中介分析

    千次阅读 2020-12-23 03:12:56
    Process的优势今天,要给大家介绍的是Process的安装及其简单的应用。Process主要应用于SPSS、SAS等传统数据统计分析软件,功能非常强大,而且操作简单,值得我们学习。先简单介绍一下其优势,主要如下:(1)我们传统...
  • SPSS-PROCESS插件的使用

    千次阅读 2022-01-05 20:57:10
    AMOS系列文章更新完以后,好多朋友联系我们,想让我们出一个PROCESS使用系列文章,经过一段时间准备,从今天开始不定期更新PROCESS文章。 SPSS软件对于中介、调节模型的使用,独立的SPSS需要的步骤较为繁琐,且对于...
  • VueCLI 通过process.env配置环境变量

    万次阅读 多人点赞 2020-10-14 16:36:24
    前言 我们在做vue或者react单页应用的时候,会发现配置文件里有procsss.env字段,那么,这个字段有什么含义,代表什么,我们...在文件夹中新建process.js文件,进行操作,理解process.env process(进程) process 对象是一
  • 进程资源管理器 特性 Process Explorer 是 Sysinternals 出品的工具,其在功能方面的独特之处有以下几点: 显示进程安全令牌(比如安全组列表、特权,以及虚拟化状态)。 加亮显示进程和线程列表中的变化。 列出服务...
  • Node 中的 Process 的理解及常用方法

    千次阅读 2021-06-03 08:36:50
    process 对象是一个全局变量,提供了有关当前 Node.js进程的信息并对其进行控制,作为一个全局变量 我们都知道,进程计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础,是线程的容器 当我们启动一个js...
  • 【解决】process is not defined

    千次阅读 2022-01-21 10:54:21
    最近在搭建前端框架,过程中遇到了不少问题,其中一个问题比较棘手,项目技术栈是webpack + vue,因为没有使用vue-cli,打包之后在前端运行报错process is not defined,网上也没有比较成熟的解决方案,特此记录,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,706,274
精华内容 682,509
关键字:

process

友情链接: super resolution.rar