博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[linux]fork、source、exec、ulimit
阅读量:6705 次
发布时间:2019-06-25

本文共 2189 字,大约阅读时间需要 7 分钟。

hot3.png

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。

bash shell的命令分为两类:外部命令和内部命令【type -a command 查看】。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。

shell变量大致分为三种类型:

1》内部变量:系统提供,不用定义,不能修改

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
$*,$@:不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

2》环境变量:系统提供,不用定义,可以修改,比如当前进程及其子进程使用的 PATH、PWD、SHELL 等

3》用户变量:用户定义,可以修改

【fork】

fork是linux的系统调用,父进程创建一个子进程(child process)。子进程从父进程那里获得一定资源并继承父进程的环境!环境变量传给子进程的变量,只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。

【source】命令即点(.)命令。

在 bash下输入man source,找到source命令解释处,可以看到解释"Read and execute commands from filename in the current shell environment and ..."。从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。

source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。

【exec】

在bash下输入man exec,找到exec命令解释处,可以看到有"No new process is created."这样的解释,这就是说exec命令不产生新的子进程。那么exec与source的区别是什么呢?

exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。

表 1. ulimit 参数说明
选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
-p 管道缓冲区的大小,以 Kbytes 为单位。 ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。
-s 线程栈大小,以 Kbytes 为单位。 ulimit – s 512;限制线程栈的大小为 512 Kbytes。
-t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。
-u 用户最大可用的进程数。 ulimit – u 64;限制用户最多可以使用 64 个进程。
-v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

转载于:https://my.oschina.net/u/347414/blog/660770

你可能感兴趣的文章
Keepalived+lvs
查看>>
RHCS集群理论暨最佳实践
查看>>
libgdx游戏引擎开发笔记(一)引擎介绍和Helloworld
查看>>
关于Linux的core dump
查看>>
Linux下Putty的复制与粘贴实现
查看>>
Thrift异步IO服务器源码分析
查看>>
转载:手把手教你做iOS推送
查看>>
RedHat 5.4+ Postfix +Extmail实现基于虚拟用户的邮件系统(五)
查看>>
通用权限管理系统组件 (GPM - General Permissions Manager) 中实现高性能的ASP.NET管理页面自动生成...
查看>>
[Android]文本框实现搜索和清空效果
查看>>
Linux的capability深入分析
查看>>
android app 集成 支付宝支付 微信支付
查看>>
Powershell进阶学习(3) Powershell实现远程管理
查看>>
LVM磁盘管理之扩展与缩小LV
查看>>
【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示
查看>>
HOWTO:在 Hyper-V Server 2008 下安装驱动
查看>>
日志完美清理总结
查看>>
离线安装GCC
查看>>
[翻译]ASP.NET 3.5中的ListView控件和DataPager控件
查看>>
keystone v2 to v3
查看>>