我怎样才能启动一个具有不同名称的进程?

我怎样才能启动一个具有不同名称的进程?

基本上,我想动态启动一些可能创建自己的子进程的进程,同时我想随时终止我刚刚创建的某组进程。

我能想到的一种方法是启动一个带有名称的进程(以区分为一个组),然后使用pkill该名称来终止它们。

问题是如何启动一个带有名称的进程,以便我可以pkill通过名称来终止它们?我也愿意接受其他解决方案。

答案1

您可以使用execshell 内置命令:

bash -c "exec -a MyUniqueProcessName <command> &"

<command>替换当前 shell,没有创建新进程,这就是我要启动一个新 shell 来调用的原因exec

然后你可以用以下命令终止该进程:

pkill -f MyUniqueProcessName

您可以启动同名的多个进程,然后pkill -f <name>将终止所有进程。

答案2

AMItac/Solaris 机构

我遇到了一个音频转码工具以相同名称运行三次的问题。

我做了以下事情。进入bin目录并复制转码脚本 3 次,并为每个脚本赋予一个新名称。tc-1、tc-2、tc-3(这是一个小工具,因此不会占用太多驱动器空间(对于大型二进制文件,您不应使用此方法)

因此该进程以一个唯一的名称启动,并且可以用这个唯一的名称终止它,而不会杀死我想继续的其他转码进程。

另一个技巧可能会有效....

添加 #bash script Name.sh,使其可执行。在那里输入您的命令并启动 bash 脚本本身。在 Centos 上,它使用您执行的 Bashscript 名称,而不是 bin 名称本身。

希望能够对别人有所帮助。

答案3

这是我使用的 Python 解决方案。显然,启动时间和内存开销会稍微大一些,但除此之外,它还是可以完成工作的。它使用模块setproctitle,您可以通过以下方式安装该模块python -m pip install setproctitle

#!/usr/bin/env python
'''
example:
launch_with_name HelloWorld sleep 10
'''

from setproctitle import setproctitle # python -m pip install setproctitle
from subprocess import run
import sys
args = sys.argv[1:]
if len(args) < 2:
  print(f"Not enough arguments")
  print(f"{sys.argv[0]} <process name> <command> [<args> ...]")
  exit(1)
setproctitle(args[0])
cmd = args[1:]
exit(run(cmd).returncode)

相关内容