关于进程控制

总结摘要
window和linux对进程的控制。

Windows的TASKLIST

TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述

该工具显示在本地或远程机器上当前运行的进程列表。

参数列表:

/S system 指定连接到的远程系统。
/U <username> 指定应该在哪个用户上下文执行这个命令。
/P 为提供的用户上下文指定密码。如果省略,则 提示输入。
/M 列出当前使用所给 exe/dll 名称的所有任务。如果没有指定模块名称,显示所有加载的模块。
/SVC 显示每个进程中主持的服务。
/V 显示详述任务信息。
/FI 显示一系列符合筛选器指定的标准的任务。
/FO format 指定输出格式。 有效值: “TABLE”、“LIST”、“CSV”。
/NH 指定列标题不应该在输出中显示。 只对 “TABLE” 和 “CSV” 格式有效。
/? 显示帮助消息。

示例

若要列出进程 ID 大于 1000 的所有任务,并将它们以 csv 格式显示,请键入:

1
    tasklist /v /fi "PID gt 1000" /fo csv

若要列出当前正在运行的系统进程,请键入:

1
tasklist /fi "USERNAME ne NT AUTHORITY\SYSTEM" /fi "STATUS eq running"

若要列出当前正在运行的所有进程的详细信息,请键入:

1
tasklist /v /fi "STATUS eq running"

若要使用用户帐户 Hiropln 的凭据列出远程计算机 srvmain 上的进程,请键入:

1
tasklist /s srvmain /u maindom\hiropln /p p@ssW23

Windows的TASKKILL

描述

结束一个或多个任务或进程。 可以通过进程 ID 或图像名称结束进程。 可以使用 tasklist 命令来确定要结束的进程的进程 ID (PID)。

参数列表

/s 指定远程计算机的名称或 IP 地址(请勿使用反斜杠)。 默认为本地计算机。
/u <usename>指定的用户的帐户权限运行该命令。 仅当还指定了 /s 时,才能指定 /u 参数。 默认值是当前登录到发出该命令的计算机的用户的权限。
/p 指定 /u 参数中指定的用户帐户的密码。
/FI 应用筛选器以选择一组任务。 可以使用多个筛选器或使用通配符 (*) 指定所有任务或映像名称。 本文的“筛选器名称、运算符和值”部分列出了有效的筛选器。
/PID 指定要终止的进程的进程 ID。
/im 指定要终止的进程的映像名称。 使用通配符 (*) 指定所有映像名称。
/F 指定强制结束进程。 对于远程进程,将忽略此参数;所有远程进程都会被强制结束。
/t 结束指定的进程及其启动的任何子进程。

示例

若要结束进程 ID 为 1230、1241 和 1253 的进程,请键入:

1
taskkill /pid 1230 /pid 1241 /pid 1253

如果进程 Notepad.exe 是由系统启动的,要强行结束它,请键入:

1
taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe

若要结束进程 ID 为 2134 的进程及其它启动的任何子进程,但前提是这些进程是由管理员帐户启动的,请键入:

1
taskkill /pid 2134 /t /fi "username eq administrator"

若要结束进程 ID 大于或等于 1000 的所有进程,无论其映像名称如何,请键入:

1
taskkill /f /fi "PID ge 1000" /im *

Linux的PS

描述

ps是显示瞬间进程的状态,并不动态连续,如果想对进程进行实时监控应该用top命令。

ps命令的格式为:ps [选项]

由于ps命令支持的系统类型相当的多,所以它的参数多的离谱,而且有没有加上 - 差很多,所以只需要记住常用的几个命令即可。

参数列表

-A 显示所有的进程,跟-e的效果相同
-a 显示现行终端机下的所有进程,包括其他用户的进程
-u 显示当前用户的进程状态
-x 通常与 a 这个参数一起使用,可列出较完整信息
-l 较长、较详细的将该PID的信息列出
-j 工作的格式(jobs format)
-f 做一个更为完整的输出

用例

1
2
3
4
~ ps -l
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY    TIME CMD
0 S  1001 1702969 1702967  0  80   0 - 11484 - pts/1    00:00:01 zsh
0 R  1001 1710433 1702969  0  80   0 -  7460 - pts/1    00:00:00 ps

各个表头的含义为:

F:代表这个进程的flag,如果是4,则代表使用者为 super user S:代表这个进程的状态stat UID:代表执行者的userId PID:进程的id PPID:父进程的id C:占用CPU资源的百分比 PRI:指进程的执行优先级(Priority的简写),其值越小越早被执行 NI:代表进程的nice值,其表示进程可被执行的优先级的修正数值 ADDR:代表进程的地址,它指出该进程在内存的哪个部分,如果是个正在运行的程序,一般都是"-" SZ:占用的内存大小 WCHAN:判断当前进程是否正在运行,若为"-",则代表正在运行 TTY:该进程是在那个终端机上面运行,若与终端机无关,则显示?,另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 TIME:占用CPU的时间 CMD:所下达的指令名称

1
2
3
4
5
6
7
8
9
~ ps -aux
USER  PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root  1  0.0  0.0 204676  7012 ?        Ss   Jul07   6:37 /sbin/init nokaslr
root  2  0.0  0.0      0     0 ?        S    Jul07   0:07 [kthreadd]
root  4  0.0  0.0      0     0 ?        I<   Jul07   0:00 [kworker/0:0H]
root  6  0.0  0.0      0     0 ?        I<   Jul07   0:00 [mm_percpu_wq]
root  7  0.0  0.0      0     0 ?        S    Jul07   7:03 [ksoftirqd/0]
root  8  0.0  0.0      0     0 ?        I    Jul07  54:18 [rcu_sched]
root  9  0.0  0.0      0     0 ?        I    Jul07   0:00 [rcu_bh]

各个表头的含义为:

USER:表示该进程属于哪个用户 PID:进程id %CPU:该进程占用CPU资源的百分比 %MEM:该进程占用内存的百分比 VSZ:该进程使用掉的虚拟内存量 (Kbytes) RSS:该进程占用的固定的内存量 (Kbytes) TTY:该进程是在那个终端机上面运行,若与终端机无关,则显示?,另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 STAT:代表该进程目前的状态,主要的状态有: R:该进程正在运行 S:该进程正在休眠,但可被某些信号(signal)唤醒 D:无法中断的休眠状态(通常为IO进程) T:该进程已经停止 Z:僵死状态,该进程应该已经终止,但是其父进程却无法正常的终止它,造成zombie(疆尸)程序的状态 W:等待状态,等待内存的分配 <:高优先级的进程 N:低优先级的进程 START:该进程被触发启动的时间 COMMAND:该进程的实际指令

Linux的KILL

描述

kill 的作用是向一个进程发送指定信号,而不仅仅是结束一个进程

kill [参数] <进程ID> […]

参数列表

-l <信息编号>  若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
-s <信息名称或编号>  指定要送出的信息。
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 只打印相关进程的进程号,而不发送任何信号
-u 指定用户,kill某个用户的所有进程
1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。
-SIGINT 是信号的名称或对应的数字,可以是SIGINT、SIGTERM等信号的名称或信号编号。默认情况下,kill命令发送的是SIGTERM信号(15)
不常用参数具体如下,请自行搜索具体用法
1
2
3
4
5
6
7
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGEMT       8) SIGFPE       9) SIGKILL     10) SIGBUS
11) SIGSEGV     12) SIGSYS      13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGURG      17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGPWR      30) SIGUSR1
31) SIGUSR2     32) SIGRTMAX

发送SIGTERM信号会请求进程正常终止,并给进程执行清理操作的机会。通常情况下,进程会捕获SIGTERM信号并进行清理工作,如保存进度、关闭文件,然后自行终止。这是一种优雅的终止方式,相比于直接使用SIGKILL(kill -9)来强制终止进程,它更加友好,允许进程有机会完成清理和资源释放。