在关闭终端后,将停止使用(带有&)的无外壳外壳脚本

时间:2018-11-25 09:39:25

标签: bash shell terminal scripting

我正在开发一个简单的截屏间谍软件,该间谍软件从脚本开始每隔5秒就会截屏一次。我希望它在关闭终端时运行。即使在将脚本与'&'一起nohup后,我的脚本也会在关闭终端时退出。

screenshotScriptWOSleep.sh

    #!/bin/bash

    echo "Starting Screenshot Capture Script."
    echo "Process ID: $$"
    directory=$(date "+%Y-%m-%d-%H:%M")
    mkdir ${directory}
    cd ${directory}
    shotName=$(date "+%s")
    while true
    do
            if [ $( date "+%Y-%m-%d-%H:%M" ) != ${directory} ]
            then
                    directory=$(date "

+%Y-%m-%d-%H:%M")
                cd ..
                mkdir ${directory}
                cd ${directory}
        fi
        if [ $(( ${shotName} + 5 )) -eq $(date "+%s" ) ]
        then
                shotName=$(date "+%s" )
                screencapture -x $(date "+%Y-%m-%d-%H:%M:%S" )
        fi
done

我运行脚本时, nohup ./screenshotScriptWOSleep.sh&

在关闭终端窗口时,它会发出警告, “关闭此标签将终止正在运行的进程:bash,日期。”

我已经读到 nohup 也适用于子进程,但是我被困在这里。谢谢。

2 个答案:

答案 0 :(得分:0)

您正在做的事情确实很奇怪,或者是在指其他过程。

nohup bash -c 'sleep 500' &

关闭该终端;打开另一个:

ps aux | grep sleep
409370294 26120     1   0  2:43AM ??         0:00.01 sleep 500
409370294 26330 26191   0  2:45AM ttys005    0:00.00 grep -i sleep

如您所见,睡眠仍在继续。

答案 1 :(得分:0)

只需忽略该警告,您的过程就不会终止。用

验证

watch wc -l nohup.out