我有一个问题ulimit:
ulimit -u unlimited
ulimit -n 60000
Run Code Online (Sandbox Code Playgroud)
如果我在屏幕上执行这些操作,它们会永远保留在屏幕上作为设置,直到我杀死屏幕或每次运行程序时是否必须运行它?
我想做的事情是无关紧要的,我只想知道它们是否会作为屏幕内的设置保存.
ulimit是一个内置的bash.它调用setrlimit(2)系统调用.
该系统调用在其-shell- 进程中修改了一些限制(同样cd内置调用chdir(2)并修改shell进程的工作目录).
在bash shell中,$$展开到该shell进程的pid.所以你可以使用ps $$(甚至编写它,例如in touch /tmp/foo$$或cat /proc/$$/status)
所以ulimit适用于你的shell并保持不变,直到你做另一个ulimit命令(或直到你的shell终止).
shell进程(以及它的工作目录)的限制由fork(2)从shell 启动的每个进程继承.这些进程包括在同一个shell中运行命令的进程.请注意,更改某个进程的限制(或工作目录)不会影响父进程的限制.请注意,execve(2)不会更改限制或工作目录.
限制(和工作目录)是进程的属性(不是终端,屏幕,窗口等......).每个进程都有自己的:限制和工作目录,虚拟地址空间,文件描述符表,等等......你可以使用PROC(5)查询他们(尝试在一些shell来运行cat /proc/self/limits和cat /proc/$$/maps和ls -l /proc/self/cwd /proc/self/fd/).另请参见本.限制(和工作目录)由fork(2)启动的子进程继承,fork(2)具有自己的副本(因此限制不是共享的,而是复制的...... fork).
但是如果你启动另一个终端窗口,它正在运行另一个shell进程(它有自己的限制和工作目录).
另见凭证(7).一定要了解fork(2)和execve(2)是如何工作的,以及shell如何使用它们(对于每个启动一个新进程的命令,实际上大多数都是这样).
你在一些评论中提到了kill(1).请务必阅读其man页面(以及此处提到的每个手册页!).同时读取kill(2)和signal(7).
程序可以单独调用setrlimit(2)(或chdir(2)),但这不会影响其父进程(通常是shell)的限制(或工作目录).当然,它会影响运行该程序的进程的未来fork -ed 子进程.
我建议阅读ALP(一本关于Linux编程的免费下载书籍),其中有几章解释了所有这些.你需要几本书来解释细节.
在ALP之后,阅读介绍(2),了解现有的系统调用(2),使用strace(1)和你自己的程序(编写一个小shell是非常有启发性的;或研究一些现有的代码),并阅读或许操作系统:三个简单的部分.
NB.的屏幕(1)实用程序可管理几个终端,每一个都具有通常为它的外壳的过程.我不知道你是否提到那个实用程序.阅读有关终端模拟器和tty揭秘的页面.
(一个真正的锤子击中笔记本电脑的图片,然后用谷歌剪切,然后gimp暂时放在我的网络服务器上;原始网址可能是https://www.istockphoto.com/fr/photo/femme-daffaires-stress%C3%A9-%C3%A0-lordinateur-crash-arrive-et-d%C3%A9truisent-le-moniteur-gm172788693-5836585我知道许可证允许我这样做.)
不要那样做,你会后悔的.
显然,你正在谈论发送一个信号(带有kill(1)或killall(1)或pkill(1)到运行screen(1)程序的某个进程,或者它的进程组.它不一样.
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |