Linux内核中的文件描述符:fd的分配--get_unused_fd
作者:网络转载 发布时间:[ 2013/1/16 10:32:29 ] 推荐标签:
这些值时是在哪设定的呢?我们应该知道,linux内核通过fork创建进程,第一个进程是静态定义的。因此,如果进程创建后没有修改这些值,那么这些和第一个进程中的值应该是一样的。下面是第一个进程的task_struct结构,仅列出部分数据。
linux/arch/arm/kernel/init_task.c
struct task_struct init_task = INIT_TASK(init_task);
#define INIT_TASK(tsk)
{
...
.signal = &init_signals,
...
}
init_signals的定义如下:
#define INIT_SIGNALS(sig) {
.count = ATOMIC_INIT(1),
.wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),
.shared_pending = {
.list = LIST_HEAD_INIT(sig.shared_pending.list),
.signal = {{0}}},
.posix_timers = LIST_HEAD_INIT(sig.posix_timers),
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers),
.rlim = INIT_RLIMITS,
}
includeasm-generic
esource.h
#define INIT_RLIMITS
{
[RLIMIT_CPU] = { RLIM_INFINITY, RLIM_INFINITY },
[RLIMIT_FSIZE] = { RLIM_INFINITY, RLIM_INFINITY },
[RLIMIT_DATA] = { RLIM_INFINITY, RLIM_INFINITY },
[RLIMIT_STACK] = { _STK_LIM, _STK_LIM_MAX },
[RLIMIT_CORE] = { 0, RLIM_INFINITY },
[RLIMIT_RSS] = { RLIM_INFINITY, RLIM_INFINITY },
[RLIMIT_NPROC] = { 0, 0 },
[RLIMIT_NOFILE] = { INR_OPEN, INR_OPEN },
[RLIMIT_MEMLOCK] = { MLOCK_LIMIT, MLOCK_LIMIT },
[RLIMIT_AS] = { RLIM_INFINITY, RLIM_INFINITY },
[RLIMIT_LOCKS] = { RLIM_INFINITY, RLIM_INFINITY },
[RLIMIT_SIGPENDING] = { 0, 0 },
[RLIMIT_MSGQUEUE] = { MQ_BYTES_MAX, MQ_BYTES_MAX },
[RLIMIT_NICE] = { 0, 0 },
[RLIMIT_RTPRIO] = { 0, 0 },
}
#define NR_OPEN (1024*1024) /* Absolute upper limit on fd num */
#define INR_OPEN 1024 /* Initial setting for nfile rlimits */
从上面的代码我们可以看到rlim_cur = 1024,也是说进程多可以打开1024个文件。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11