请帮忙看看我这个shell是什么情况呢

时间:2022-04-04 20:55:05
#!/bin/sh
tt(){
x=5
y=5
j=0
while : 
do
echo "\033[3;3H"
if [ $j = 10 ]
then 
echo "j:$j"
exit
fi
sleep 1
done
}
trap "j=10" 10
tt &
这段代码!我目的是:我运行这个程序,然后在打开一个窗口,在里面输入 kill -10 "进程号" ,然后就会echo并退出。 
当我没在tt后加&时,可以运行想要结果!当我加在tt后加&时,就没反应。
请问这个是什么问题呢!!!

15 个解决方案

#1


该回复于2013-02-21 10:50:27被管理员删除

#2


后台运行会屏蔽某些信号,你可以从这个方面考虑一下

#3


后台运行程序会屏蔽信号的话。那该怎么解决啊????

#4


我刚运行你的这个脚本,会一直打印\033[3;3H,只能Ctrl+D 结束中断才可以停止,汗啊,为什么不使整个脚本后台运行啊?这样起码还可以查询得到吧....

#5


该回复于2013-02-21 11:28:46被管理员删除

#6


不好意思,我不会

#7


不好意思,我不会

#8


woyebuhui

#9


& 是后台符号,放在完整指令列的最后就表示在后台执行,你tt后头加个&是做啥呢?

#10


echo "\033[3;3H" 只是设置光标啊!不应该是一直打印啊!可能AIX版本不一样吧!

我在测试测试,有结果我在说下

#11


我也不会。。

#12


我也一直打印\033[3;3H

#13


关于代码中的033[3;3H 以前研究过,在vi源代码中看见过,如果需要更多的资料可以google Cursor Movement

关于后台运行的代码操作系统会关闭其与标准输入,输出,标准错误输出的文件描述符的链接,因为它们被操作系统理解为无控制终端的进程,与守护进程有点相似,但是却不同于守护进程,当程序尝试向终端输出的时候通常会出现程序被阻塞(暂停)的情况,可以尝试在另一个终端输入kill命令之后,在启动tt函数的终端中输入fg命令查看你要的结果是否被输出。

关于将进程放到后台执行信号是否被阻塞,这会与不同操作系统的实现有所不同,通常操作系统只会阻塞SIGSTOP、SIGQUIT信号,使用trap一般不会受到影响

#14


我也不会。。。

#15


加&在后台运行了不是?
你继续fg一下 结果应该出来了

#1


该回复于2013-02-21 10:50:27被管理员删除

#2


后台运行会屏蔽某些信号,你可以从这个方面考虑一下

#3


后台运行程序会屏蔽信号的话。那该怎么解决啊????

#4


我刚运行你的这个脚本,会一直打印\033[3;3H,只能Ctrl+D 结束中断才可以停止,汗啊,为什么不使整个脚本后台运行啊?这样起码还可以查询得到吧....

#5


该回复于2013-02-21 11:28:46被管理员删除

#6


不好意思,我不会

#7


不好意思,我不会

#8


woyebuhui

#9


& 是后台符号,放在完整指令列的最后就表示在后台执行,你tt后头加个&是做啥呢?

#10


echo "\033[3;3H" 只是设置光标啊!不应该是一直打印啊!可能AIX版本不一样吧!

我在测试测试,有结果我在说下

#11


我也不会。。

#12


我也一直打印\033[3;3H

#13


关于代码中的033[3;3H 以前研究过,在vi源代码中看见过,如果需要更多的资料可以google Cursor Movement

关于后台运行的代码操作系统会关闭其与标准输入,输出,标准错误输出的文件描述符的链接,因为它们被操作系统理解为无控制终端的进程,与守护进程有点相似,但是却不同于守护进程,当程序尝试向终端输出的时候通常会出现程序被阻塞(暂停)的情况,可以尝试在另一个终端输入kill命令之后,在启动tt函数的终端中输入fg命令查看你要的结果是否被输出。

关于将进程放到后台执行信号是否被阻塞,这会与不同操作系统的实现有所不同,通常操作系统只会阻塞SIGSTOP、SIGQUIT信号,使用trap一般不会受到影响

#14


我也不会。。。

#15


加&在后台运行了不是?
你继续fg一下 结果应该出来了