我偶然发现了这个。
我只是输入man fork,而不是显示系统调用文档,而是向我显示了一个awk扩展名,但是,部分页码是3am,而不仅仅是3.
是什么3am意思?
我有一个守护进程,在 bash 中实现并通过cron和@reboot选项运行,它显示桌面处于非活动状态。脚本如下(为了测试目的,时间很短):
#!/bin/bash
P_STATE=0
while :
do
sleep 5
if [ $P_STATE == 0 ]; then
[ `xprintidle` -ge 25000 ] && P_STATE=1 && wmctrl -k on
else
[ `xprintidle` -le 25000 ] && P_STATE=0
done
Run Code Online (Sandbox Code Playgroud)
问题:例如,如果用户仍然在登录屏幕中,xprintidle并且wmctrl由于桌面尚未加载而失败。为了避免这种情况,我将下一行放在脚本的开头:
while:
do
sleep 10s
[ -n `who | grep "$USER"` ] && break
done
Run Code Online (Sandbox Code Playgroud)
因此,脚本等待用户(在 crontab 文件中将 USER 变量设置为我的用户名)被记录。但是,如果用户开始,例如,终端会话(而不是像 KDE 或 GNOME 这样的图形会话),脚本也会继续。
如何确定用户是否已经处于能够“显示桌面模式”的“图形”会话中?此外,我如何确保“图形”会话已完全加载并且不在加载过程中或类似的东西?
我的解决方案:
我的(非正式)解决方案是在主循环中添加以下grep行:
WAIT_TIME=180
while:
do
sleep $WAIT_TIME
[ …Run Code Online (Sandbox Code Playgroud) 试图了解 Linux(具体是 Ubuntu 13.04)中环境的行为,我发现在不同的情况下,在不同的上下文中使用或定义了设置环境变量。例如,如果我检查, locale,我会得到:
$ locale
LANG=en_US.UTF-8
LANGUAGE=es_ES:es_HN:es_EC:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=es_ES.UTF-8
// more output
Run Code Online (Sandbox Code Playgroud)
但是,如果我发现,例如,LC_CTYPE使用env | grep "LC_CTYPE",它不会发送任何输出。一般来说,locale向我展示了 13 个LC_*变量,但env只有 9 个:
$ locale | grep "LC_*" | wc -l
13
$ env | grep "LC_*" | wc -l
9
Run Code Online (Sandbox Code Playgroud)
其他具有不同“性质”的变量是PS1. 例如:
$ env | grep "PS1" # No output, but...
$ set | grep "PS1" | head -n 1
PS1=$'\\[\\033[1;33m\\][\\t][\\W]\342\230\233\\[\\033[0m\\] '
Run Code Online (Sandbox Code Playgroud)
当然,PS1在我当前的环境中是一个定义明确的变量,因为我看到我的提示相应地改变了。
在其他上下文中查看 …
为什么epoll_create没有被列为库函数(手册页,第 3 节),但是accept却被列为库函数?虽然这两个函数都是由内核系统调用提供的libc并且都引用内核系统调用?
我知道“为什么”问题通常不受欢迎,但这是我要求更好地理解这些概念之间的关系以及向第 2 和/或第 3 节添加某些内容的标准之间的关系以及 libc 之间的关系的方式。和系统调用(因为毕竟 libc 是为 C 程序实现与内核本身的接口的人。因此,据我了解,所有系统调用都是库函数,因为 libc 库提供了所有这些函数;或者有例外吗?我的解释?)。