在我的 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
这是一个实现您想要的简单方法:
- 将您的代码放入可执行文件中。
- 为每个 fork 创建指向该文件的符号链接。
- 执行符号链接而不是原始文件。
参考:
答案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