1

我将举一个例子来描述我的问题。

#!/bin/sh
if (( $# == 1 ))
then
    xmessage "before kill"
    killall xautolock
    xmessage "after kill"

    var=$1
    let "var += 1"

    xautolock -time $var -locker "\"./test1.sh\"" &
    xmessage "after run"

    exit 0
fi

我第一次从 bash 启动 xautolock:

$ xautolock -time 1 -locker "./test1.sh 1" &

选项 -time 意味着 xautolock 将在 1 分钟空闲时间后启动一个程序,该程序作为选项 -locker 的参数传递。

从 bash 启动 xautolock 后:

$ ps ax | grep -E "xaut|test"
6038 pts/1    S      0:00 xautolock -time 1 -locker ./test1.sh 1
6046 pts/2    S+     0:00 grep -E xaut|test

启动 xmessage "before kill" 后:

$ ps ax | grep -E "xaut|test"
6038 pts/1    S      0:00 xautolock -time 1 -locker ./test1.sh 1
6223 pts/1    S      0:00 /bin/sh /home/mhd/Texts/Programming/Programms/test1.sh 1
6240 pts/2    S+     0:00 grep -E xaut|test

启动xmessage“杀死后”后:

$ ps ax | grep -E "xaut|test"
6223 pts/1    S      0:00 /bin/sh /home/mhd/Texts/Programming/Programms/test1.sh 1
6373 pts/2    S+     0:00 grep -E xaut|test

启动 xmessage 后“运行后”:

$ ps ax | grep -E "xaut|test"
6223 pts/1    S      0:00 /bin/sh /home/mhd/Texts/Programming/Programms/test1.sh 1
6470 pts/2    S+     0:00 grep -E xaut|test

为什么 xautolock 在此步骤之后不在进程列表中?如何在 Bash 脚本中第二次启动它?

4

1 回答 1

1

xautolock 默认关闭 stdout 和 stdrerr。如果您将选项“-noclose”传递给 xautolock,那么它不会关闭 stdout 和 stdrerr,您可以在 Bash 脚本中再次启动 xautolock。但我不明白为什么如果 xautolock 已关闭 stdout 和 stderr,它不会在我的示例脚本中再次启动?

于 2013-07-25T09:37:20.880 回答