Cómo detectar si el script de Python se está ejecutando como un proceso en segundo plano

¿Hay alguna forma de saber si mi script de Python se está ejecutando como un proceso en segundo plano o no? Estoy tratando de diferenciar entre estos dos:

sudo ./myscript.py sudo ./myscript.py & 

El uso de sys.argv no funciona, el signo y no cuentan como un argumento aparentemente. Y cuál sería el efecto de lo siguiente:

 sudo python myscript.py sudo python myscript.py & 

He echado un vistazo alrededor, pero parece que todo se trata de iniciar un proceso en segundo plano desde un script de Python, no si el script de Python en sí es un proceso en segundo plano. ¡Gracias!

EDITAR: El objective es emitir un mensaje (o no), es decir , "Press Ctrl+C to stop this script" si se inicia normalmente, pero no muestra el mensaje si se inicia como un proceso en segundo plano.

EDIT 2 Olvidé mencionar que esta secuencia de comandos de Python se iniciará con una secuencia de comandos en /etc/init.d en lugar de hacerlo desde un indicador de terminal. Por lo tanto, la respuesta marcada como correcta sí responde a la pregunta como la formulé y con la información proporcionada, pero pensé que debería señalar que no funciona en el escenario init.d , para evitar posibles confusiones en el futuro.

    Basado en la respuesta para C @AaronDigulla señalada en un comentario:

     import os import sys def main(): if os.getpgrp() == os.tcgetpgrp(sys.stdout.fileno()): print 'Running in foreground.' else: print 'Running in background.' if __name__ == '__main__': main() 

    Basado en la solución de bash de esta respuesta:

     import os import subprocess pid = os.getpid() if "+" in subprocess.check_output(["ps", "-o", "stat=", "-p", str(pid)]): print "Running in foreground" else: print "Running in background" 

    Vi las otras soluciones en otras y decidí escribir una solución de python pura. Lee de /proc//stat lugar de llamar a un subproceso.

     from os import getpid with open("/proc/{}/stat".format(getpid())) as f: data = f.read() foreground_pid_of_group = data.rsplit(" ", 45)[1] is_in_foreground = str(getpid()) == foreground_pid_of_group 

    Los significados de las columnas del archivo de estadísticas se pueden encontrar aquí