当一个孩子被分叉时,它继承了父母的文件描述符,如果孩子关闭文件描述符会发生什么?如果孩子开始写,在父母结束时文件会发生什么?谁来管理这些不一致,内核还是用户?
当进程调用该close
函数以通过文件描述符关闭特定打开的文件时。在进程的文件表中,引用计数减一。但是由于父子进程都持有同一个文件,引用计数是 2,关闭后它减少到 1。由于它不是零,进程仍然继续使用文件,没有任何问题。
请参阅 Terrence Chan UNIX 系统编程,(文件的 Unix 内核支持)。
当我运行时top -H
,我看到我的多个mysql
线程都具有相同的 PID。但是,在ps -eLf
我看来,每个人都有不同的 PID:
ps -eLf
UID PID PPID LWP C NLWP STIME TTY TIME CMD
mysql 1424 1 1424 0 17 18:41 ? 00:00:00 /usr/sbin/mysqld
mysql 1424 1 1481 0 17 18:41 ? 00:00:00 /usr/sbin/mysqld
mysql 1424 1 1482 0 17 18:41 ? 00:00:00 /usr/sbin/mysqld
mysql 1424 1 1483 0 17 18:41 ? 00:00:00 /usr/sbin/mysqld
mysql 1424 1 1484 0 17 18:41 ? 00:00:00 /usr/sbin/mysqld
mysql 1424 1 1485 0 17 18:41 …
Run Code Online (Sandbox Code Playgroud)