Linux上的环境变量中可以存储的数据量有限制吗?如果有,限制是什么?

对于Windows,我发现了以下KB article条总结:

推荐答案

我认为Linux上没有每个环境变量的限制.所有环境变量的总大小限制在execve()倍.有关更多信息,请参阅"参数和环境的大小限制"here.

一个进程可以使用setenv()putenv()将环境扩展到exec分配的初始空间之外.

下面是一个快速而肮脏的程序,它创建了一个256MB的环境变量.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
  size_t size = 1 << 28; /* 256 MB */
  char *var;

  var = malloc(size);
  if (var == NULL) {
  perror("malloc");
  return 1;
}

  memset(var, 'X', size);
  var[size - 1] = '\0';
  var[0] = 'A';
  var[1] = '=';

  if (putenv(var) != 0) {
  perror("putenv");
  return 1;
}

  /*  Demonstrate E2BIG failure explained by paxdiablo */
  execl("/bin/true", "true", (char *)NULL);
  perror("execl");


  printf("A=%s\n", getenv("A"));

  return 0;
}

Linux相关问答推荐

Bash:将多行转换为单行的命令

通过添加1位数字替换最后4位数字(不包括0x)

Docker 默认使用交换文件吗?

如何在脚本中使用sudo修改其他用户的crontab

如何在 gcc 搜索路径上防止多个版本的 Boost?

在 Ubuntu 中,如何设置 Tomcat 9 以使用 Java 17?

如何恢复已停止的进程?

Bash 更新 yaml 文件中的图像值

根据其他列的值创建一个新列

我有 ext2 格式的文件系统图像.我喜欢在终端中读取 Linux 特别是 Ubuntu 中的所有文件系统 struct 数据.有没有工具>

使用 Dockerfile RUN 执行某些操作但忽略错误

需要解释 Linux bash 内置 exec 命令行为

如何仅使用 SED 获得第二行

为什么 Linux 不通过 TSS 使用硬件上下文切换?

如何克隆 OpenLDAP 数据库

在 Ubuntu 中重启 Nginx

在 VIM 中搜索和替换导致尾随字符

os.walk 没有隐藏文件夹

学习内核编程

如何在 docker 容器中运行 cron 作业(job)