使用其 PID 在后台重命名(分叉)bash 进程

使用其 PID 在后台重命名(分叉)bash 进程

在我的 Ubuntu Linux 电脑上,我使用 shell bash 创建了一个这样的循环

这是我的代码”./上标

cat filename.txt | while read LINE || [[ -n $LINE ]];
do
    ./script $LINE >> $LINE.txt 2>> $LINE.err & sleep 1
    wait;
done > /dev/null 2>&1 &
echo "[PID $!]"

我来啦

现在,当脚本消失时,会有很多分叉进程(一次一个)-bash像这样的名字

username    15029  0.0  0.3   7404  3060 ?        S    mag31   0:00 -bash
username    13849  0.8  0.6  33048  6432 ?        S    mag31   0:08  \_ ./script HERE MY LINE
username    13869  0.1  0.3  33048  6451 ?        S    mag31   0:09    \_ ./otherscript HERE MY LINE
username    13881  0.1  0.1  33048  6465 ?        S    mag31   0:08    \_ ./otherscript HERE MY LINE

如何重命名 pid 为 15029 的进程,现在它简单地被称为“-bash”?

我也尝试过

$ chmod 777 /proc/15029/comm
chmod: changing permissions of '/proc/15029/comm': Operation not permitted

然后做什么

echo 'PROCESSNAME' > /proc/15029/comm"

但就像你看到的错误是

“操作不允许”也使用 sudoers 用户名或 root (su)

如果没有办法,我可以从流程本身重命名它吗?

说使用

bash -c "exec -a <MyProcessName> <Command>"

在像我的while这样的多行命令中?

多谢

答案1

我也遇到了同样的问题。我们无法做到这一点

echo 'PROCESSNAME' > /proc/15029/comm"

这是特权问题

答案2

这是一个实现您想要的简单方法:

  1. 将您的代码放入可执行文件中。
  2. 为每个 fork 创建指向该文件的符号链接。
  3. 执行符号链接而不是原始文件。

参考:

答案3

快速演示如何使用wait

a_脚本.sh:

#!/bin/bash
i=5
while ((i--)); do
    $PWD/b_script.sh >> output
    sleep 2
done &
p=$! # because we just have one background
     # process this isn't really necessary.
echo Lets wait for all scripts to end.
read -p \
"meanwhile pick a number, fast! " n && echo you picked: $n
echo back to waiting...
wait $p
echo All done\!

b_脚本.sh:

#!/bin/bash
echo b_script | ts

相关内容