1. getenv()获取环境变量
2. gedit 1.c 手工置于前台 fg 后台->前台
3. getcwd :获取当前目录 printenv:打印环境变量
4. getpwuid(getuid())->pw_name
5. cd:shell内键命令,不牺牲子进程。
6、 exit 和 wait 配合使用
1)void exit(int status); status 返回给父进程,可以被wait接受。并且会强制缓冲存储。status等于0时表示正常。
2)pid_t wait(int status);
3)pid_t waitpid(pid_t pid, int * status, int options) 此函数和pid_t fork(void) 都可以接受子进程。
7. 日志文件所在:/var/log/syslog
8. 线程编译时要加 -lpthread
9. pthread_self()线程号
10. memset, bzero 可以将内存清零。
11. 条件变量(线程间通信,解决空转,信号量由条件变量封装而成)
1)pthread_cond_wait() 睡了解锁,醒来加锁。
2)pthread_cond_broadcast()唤醒所有
3)pthread_cond_signal 唤醒第一个
12 守护进程创建步骤
1)创建子进程,父进程退出。
pid = fork();
if(pid < 0)
{
perror("fork error");
eixt(1);
}
else if(pid > 0)
exit(0);
2)在子进程中创建新会话。(前两步骤必须有)
setpid();(返回进程组ID)
3)改变当前目录
chdir("/tmp");
4)重新设置文件权限掩码
umask(0);
5)关闭文件描述符
for(i = 0; i < getdtablesize(); i++) close(i);
13 map 映射4函数(可重入问题)pthread_once pthread_key_create pthread_setspecific pthread_getspecific
14 线程池中,队列是带缓冲的临界资源。
15 kill 2 = crtl c kill -17 (用wait 收尸,接收子进程信号) kill -18 continue kill -19 stop (kill -9 和kill -19 不能被忽略。)
16 EEXIST(17) File exists
17 sprintf 字符串拼凑。
18 无名管道中: fd[0]是负责读, fd[1]是负责写。
19 close其实是把文件使用记数减去一。
20 ipcs指令用于查看system V 家族的进程间通信 -m只是查看共享内存。
21 p->消费者 post v->生产者 wait