如何在不是孩子并且可以继续运行的bash中执行应用程序?

问题描述

我正在编写bash脚本,并正在检查应用程序是否正在运行。如果未运行,则应在单独的进程(而不是子进程)中启动它。如果正在运行,则应将窗口最大化。我做到了,但是新进程在启动后不久就终止了,可能是因为脚本进程结束了。

#!/bin/bash
if (ps aux | grep App1 | grep -v grep > /dev/null)
then
    echo App1 is running
    wmctrl -x -r WMClassOfApp1 -b "add,maximized_vert,maximized_horz"
else
    echo App1 is not running
    sh -c /usr/bin/app1 & disown # This app should be started in a separate process and not terminate
fi

我可能不得不补充一点,我是从udev规则调用此脚本的。当我在终端中执行它时,它可以正常工作。当我从udev规则调用它时,app1终止。

解决方法

bash脚本不是解决此问题的正确方法:最好是将其添加到系统的crontab中。