+ -
当前位置:首页 → 问答吧 → 当前进程怎么才能知道自己被放到后台运行了?

当前进程怎么才能知道自己被放到后台运行了?

时间:2011-03-08

来源:互联网

jobs -p在后台进程中不起作用 ...


以下代码不起作用啊:
  1. #!/usr/dt/bin/dtksh
  2. sleep 10
  3. for pid in `jobs -p`
  4. do
  5.   echo checking $pid
  6.   [[ "x$pid" == "x$" ]] && echo I am $ running in background
  7. done

  8. sleep 3
复制代码
jobs -p 什么都没有返回 ...

作者: DirtyBear   发布时间: 2011-03-08

回复 DirtyBear


    手动执行有输出吗?

作者: wtuter   发布时间: 2011-03-08

本帖最后由 DirtyBear 于 2011-03-08 16:40 编辑

很奇怪的情况:但凡在run.sh中,jobs -p都没有输出。但是在终端中手动执行,就有。
  1. #!/usr/dt/bin/dtksh

  2. sleep 30

  3. for pid in `jobs -p`
  4. do
  5.   echo checking $pid
  6.   [[ "x$pid" == "x$" ]] && echo I am $ running in background
  7. done

  8. sleep 2

  9. print done
复制代码
bash-3.00#
bash-3.00# ./run.sh &
[2] 12533
bash-3.00#
bash-3.00# jobs -p
12533
bash-3.00# ./run.sh
done
done
done
[1]-  Done                    ./run.sh
[2]+  Done                    ./run.sh

作者: DirtyBear   发布时间: 2011-03-08

这个和shell有关吧,我的bash和ksh都能显示的,是不是你的dtksh比较特殊?
我猜可能是dtksh会判断当前shell是否是interactive shell,如果不是, jobs -p就没有输出?
或者是jobs -p 的输出不是stdout,而是tty ?
没有环境,以上仅仅是猜测。

作者: seeLnd   发布时间: 2011-03-08