在 Linux 中更改进程名称

标签 c linux process

我在 Linux 上,我正在从我的 C spawn 应用程序中 fork /执行一个新进程。是否也可以更改这些新子进程的命名?

我希望能够识别正在启动的进程,以防出现问题并且我需要手动终止它。目前它们都具有相同的名称。

最佳答案

我认为这应该可行,以说明原理...

#include <stdio.h>

int main(int argc, char *argv[]) {
  argv[0][0] = 65;
  sleep(10);
}

将更改名称,并用“A”代替第一个字母。 CtrlZ 暂停,然后运行 ​​ps 以查看名称更改。我不知道,但这似乎有点危险,因为有些事情可能取决于 argv[0]

此外,我尝试将指针本身替换为另一个字符串;没有雪茄。所以这只适用于 strcpy 和比原始名称短或等于的字符串。

对此可能有也可能没有更好的方法。我不知道。

编辑:非文字解决方案:如果你正在 fork ,你知道 child 的 PID(getpid() 在 child 中,fork() 在父中的结果) .只需将它输出到您可以阅读的地方,然后通过 PID 杀死 child 。

另一个非文字解决方案:使用另一个名称 (ln -s a.out kill_this_a.out) 建立到可执行文件的软链接(soft link),然后在执行时执行链接。该名称将是链接的名称。

关于在 Linux 中更改进程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55804523/

相关文章:

c - 临时指针 : Correct malloc and free

return 语句中的比较

java - 折线图 JavaFX 性能

linux - 在 Linux/Unix 中显示多个文件

linux - 在 Go 中设置进程名称(如 `ps` 所示)

带 execvp cat 的 C 程序输入不超过 150 行

c - 如何在没有空终止符的情况下初始化 char 数组?

python - 如何确定是否安装了 iODBC、unixODBC(或两者均未安装)?

c - 在 c 中监控主应用程序

c# - 即使在进程终止时也保证代码执行