谁负责设置流程名称?

谁负责设置流程名称?

我正在开发一个现有的基于 Linux 的脚本,其中包含以下内容

pid=`jps | grep TestServer | awk '{print $1}'`
kill -9 $pid

我知道这将终止名为“TestServer”的进程

我是 Linux 新手,正在尝试理解该脚本,所以如果这是一个愚蠢的问题,请原谅。

请告诉我 谁负责设置进程名称“TestServer”

答案1

A过程没有任何名字。它有一个(正)唯一数字,称为其进程号(进程 ID)。

几乎所有进程都是从其父进程启动的系统调用记录在叉(2)手册页(有时,vfork(2)可以使用)。派生进程几乎与其父进程相同(它执行相同的二进制文件)。要执行新程序,执行(2)syscall 在某些进程内部使用。

但是,进程确实会执行某个程序,该程序确实有名称(因为它存在于文件系统中)。您可以通过以下链接了解有关进程的更多信息:进程(5)伪文件系统。当然,多个进程可以执行同一个程序。您可以尝试ls -l /proc/self/列出与您的进程(执行该ls命令的进程)相关的伪文件。您可能会觉得很有趣cat /proc/self/maps。并/proc/1234/告诉您有关 pid 1234 的进程的信息。

pkill、、实用pgrep程序pidof正在使用/proc

我建议你读一本关于高级Unix编程-在纸面上-以及高级Linux编程-在网上-;另请阅读系统调用(2),还有有关系统调用的维基页面

您的脚本不适合直接使用kill -9。它应该先尝试kill -TERM然后kill -QUIT(让程序正常终止,例如清理临时文件等...)然后才尝试最后kill -KILL(即kill -9)。您可以阅读杀死(2)手册页(以及信号(7)请参阅手册页。

附加物

(2014 年 7 月新增)

在 Linux 上,你可以使用 Linux 特定的pthread_setname_np(3)设置线程(不是进程)短名称的函数

答案2

该名称来自为程序指定的名称。因此,无论包含可执行文件的文件名称是什么。如果文件名为 fred,则进程名称将为 fred。

通过名称终止进程的更好方法是使用 pkill。

pkill TestServer

相关内容