【发布时间】:2013-07-05 11:03:51
【问题描述】:
当 shell 脚本文件编码不同时,我在进程名称中遇到了一种奇怪的、非常奇怪的行为。
场景如下:
两个文件 - caller.sh(ASCII 文本) - executor.sh(UTF-8 Unicode 文本)
# caller.sh
#!/bin/bash
/soft/executer.sh &
sleep 60
执行“caller.sh &”后,“ps”命令返回两个名为“caller.sh”的进程:
PID TTY TIME CMD
19566 pts/7 00:00:00 bash
22699 pts/7 00:00:00 caller.sh
22690 pts/7 00:00:00 caller.sh
22694 pts/7 00:00:00 ps
但如果将“caller.sh”编码更改为“Bourne-Again shell script text executable”(保存在 windows 框中并传输到 linux),命令 ps 开始正确显示:
PID TTY TIME CMD
19566 pts/7 00:00:00 bash
22689 pts/7 00:00:00 caller.sh
22694 pts/7 00:00:00 ps
22690 pts/7 00:00:00 executer.sh
有人能解释一下编码和进程名称/bash 之间的关系吗?
p.s:dos2unix 没有解决问题!
谢谢
【问题讨论】:
-
不是
!#/bin/bash,而是#!/bin/bash -
对不起,请忽略..这是一个错字
-
如果
executor.sh是从caller.sh调用的,它如何接收比caller.sh更小的PID?看起来 22685 是一个自己运行的单独实例,而不是caller.sh实例的子进程。 -
好的,我已经手动创建了该场景,但我错误地放置了一个较小的 PID。也无视这一点。