nohup 命令本身并不提供直接的内存限制功能。它的主要作用是让进程在用户退出登录后继续运行,并将输出重定向到指定的文件,以避免挂起(hang up)。
如果你想要限制一个进程的内存使用,可以使用 cgroups(control groups)或者 ulimit 命令。
安装 cgroups 工具(如果尚未安装):
sudo apt-get install cgroup-tools # Debian/Ubuntu
sudo yum install libcgroup-tools # CentOS/RHEL
创建一个新的 cgroup:
sudo cgcreate -g memory:/mygroup
设置内存限制(例如,限制为 512MB):
echo "536870912" | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
将进程添加到 cgroup:
sudo cgexec -g memory:mygroup your_command
ulimit 命令可以在 shell 会话级别限制资源使用,但它不能在进程启动后动态更改。
查看当前的内存限制:
ulimit -v
设置内存限制(例如,限制为 512MB):
ulimit -v 524288
启动进程:
your_command
请注意,ulimit 设置的内存限制是在 shell 会话级别生效的,如果使用 nohup 启动进程,ulimit 设置可能不会生效。在这种情况下,建议使用 cgroups。
假设你想使用 cgroups 限制一个名为 myapp 的进程的内存使用:
# 创建一个新的 cgroup
sudo cgcreate -g memory:/myapp
# 设置内存限制为 512MB
echo "536870912" | sudo tee /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes
# 启动进程并将其添加到 cgroup
sudo cgexec -g memory:myapp nohup ./myapp &
这样,myapp 进程的内存使用将被限制在 512MB。