在打开屏幕的 bash 文件中获取 PID
Get PID in bash file with open screen
我是 bash 编程的初学者。我想从进程中获取 PID,以便使用 trap
和 kill
接收信号并将信号发送到同一文件中的程序。
具体我是这样启动程序开屏的:
screen -d -m "start program"
process_id=`/bin/ps -fu $USER| grep "program" | grep -v "grep" | awk '{print }'`
变量process_id
包含两个PID,不是一个。如果我运行没有屏幕,我没有这个问题(反正我必须打开屏幕)。
有人解决这个问题吗?
另一个问题:如果我写
screen -d -m "start program">log
未打印日志文件。有什么建议吗?
对于你的第一个问题,pgrep
(或process grep)就是你要找的。
例如,以下将 return 所有 bash 进程的 PID 列表 运行.
preg bash
如果您阅读文档:
-signal
Defines the signal to send to each matched process. Either the numeric or the symbolic signal name can be used.
第二个问题,如果您的 screen
版本支持,您可以使用 -LogFile
标志。或者在您的 .screenrc
配置文件中指定日志文件。
This has already been answered.
编辑:
如果您无法访问通常放置配置文件 .screenrc
的用户主目录,您可以更改 $SCREENRC
环境变量以明确为其设置替代路径。
我是 bash 编程的初学者。我想从进程中获取 PID,以便使用 trap
和 kill
接收信号并将信号发送到同一文件中的程序。
具体我是这样启动程序开屏的:
screen -d -m "start program"
process_id=`/bin/ps -fu $USER| grep "program" | grep -v "grep" | awk '{print }'`
变量process_id
包含两个PID,不是一个。如果我运行没有屏幕,我没有这个问题(反正我必须打开屏幕)。
有人解决这个问题吗?
另一个问题:如果我写
screen -d -m "start program">log
未打印日志文件。有什么建议吗?
对于你的第一个问题,pgrep
(或process grep)就是你要找的。
例如,以下将 return 所有 bash 进程的 PID 列表 运行.
preg bash
如果您阅读文档:
-signal
Defines the signal to send to each matched process. Either the numeric or the symbolic signal name can be used.
第二个问题,如果您的 screen
版本支持,您可以使用 -LogFile
标志。或者在您的 .screenrc
配置文件中指定日志文件。
This has already been answered.
编辑:
如果您无法访问通常放置配置文件 .screenrc
的用户主目录,您可以更改 $SCREENRC
环境变量以明确为其设置替代路径。