Linux启动进程的命令

Linux启动进程的命令,第1张

linux启动进程的命令可以�”.sh,python ,./文件名。下面是有关进程的操作:1.查进程ps命令查找与进程相关的PID号:ps a 显示现行终端机下的所有程序,包括其他用户的程序。ps -A 显示所有程序。ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。ps -e 此参数的效果和指定"A"参数相同。ps e 列出程序时,显示每个程序所使用的环境变量。ps f 用ASCII字符显示树状结构,表达程序间的相互关系。ps -H 显示树状结构,表示程序间的相互关系。ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。ps s 采用程序信号的格式显示程序状况。ps S 列出程序时,包括已中断的子程序资料。ps -t<终端机编号>指定终端机编号,并列出属于该终端机的程序的状况。ps u 以用户为主的格式来显示程序状况。ps x 显示所有程序,不以终端机来区分。 最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。ps aux | grep program_filter_word,ps -ef |grep tomcatps -ef|grep java|grep -v grep 显示出所有的java进程,去处掉当前的grep进程。 2.杀进程 使用kill命令结束进程:kill xxx 常用:kill -9 324 Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME1. 更改档案拥有者 命令 : chown [-cfhvR] [--help] [--version] user[:group] file... 功能 : 更改文件或者文件夹的拥有者 参数格式 : user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料    -R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更) 例如:chown -R oracle:oinstall /oracle/u01/app/oracle更改目录拥有者为oracle 2. 修改权限 命令:chmod (change mode) 功能:改变文件的读写和执行权限。有符号法和八进制数字法。 选项:(1)符号法: 命令格式:chmod {u|g|o|a}{+|-|=}{r|w|x} filename u (user) 表示用户本人。 g (group) 表示同组用户。 o (oher) 表示其他用户。 a (all)表示所有用户。 + 用于给予指定用户的许可权限。 - 用于取消指定用户的许可权限。 = 将所许可的权限赋给文件。 r (read) 读许可,表示可以拷贝该文件或目录的内容。 w (write) 写许可,表示可以修改该文件或目录的内容。 x (execute)执行许可,表示可以执行该文件或进入目录。 (2)八进制数字法: 命令格式:chmod abc file 其中a,b,c各为一个八进制数字,分别表示User、Group、及Other的权限。 4 (100)表示可读。 2 (010)表示可写。 1 (001)表示可执行。 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=5。 例如:# chmod a+rx filename 让所有用户可以读和执行文件filename。 # chmod go-rx filename 取消同组和其他用户的读和执行文件filename的权限。 # chmod 741 filename 让本人可读写执行、同组用户可读、其他用户可执行文件filename。 # chmod -R 755 /home/oracle 递归更改目录权限,本人可读写执行、同组用户可读可执行、其他用户可读可执行 3. 修改文件日期 命令:touch 格式:touch filenae 功能:改变文件的日期,不对文件的内容做改动,若文件不存在则建立新文件。 例如:% touch file 4. 链接文件 命令:ln (link) 格式:ln [option] filename linkname ln [option] directory pathname 功能:为文件或目录建立一个链。其中,filename和directory是源文件名和 源目录名;linkname和pathname分别表示与源文件或源目录名相链接的 文件或目录。 选项:-s 为文件或目录建立符号链接。不加-s表示为文件或目录建立硬链接 注释:链接的目地在于,对一个文件或目录赋予两个以上的名字,使其可以出 现在不同的目录中,既可以使文件或目录共享,又可以节省磁盘空间。 例如:% ln -s filename linkname 5. 显示日期 命令:date 例如:% date 6. 显示日历 命令:cal (calendar) 格式:cal [month] year 功能:显示某年内指定的日历 例如:% cal 1998 7. 显示文件头部 命令:head 格式:head [option] filename 功能:显示文件的头部 选项:缺省 显示文件的头10行。 -i显示文件的开始 i行。 例如:% head filename 8. 显示文件尾部 命令:tail 格式:tail [option] filename 功能:显示文件的尾部 选项:缺省 显示文件的末10行。 -i显示文件最后 i行。 +i从文件的第i行开始显示。 例如:% tail filename 9. 显示用户标识 命令:id 格式:id [option] [user] 功能:显示用户标识及用户所属的所有组。 选项:-a 显示用户名、用户标识及用户所属的所有组 注释: 例如:% id username 10. 查看当前登录的用户 命令:users 11. 显示都谁登录到机器上 命令:who 格式:who 功能:显示当前正在系统中的所有用户名字,使用终端设备号,注册时间。 例如:% who 12. 显示当前终端上的用户名 命令:whoami 格式:whoami 功能:显示出当前终端上使用的用户。 例如:% whoami 13. 寻找文件 命令:find 格式:find pathname [option] expression 功能:在所给的路经名下寻找符合表达式相匹配的文件。 选项:-name 表示文件名 -user 用户名,选取该用户所属的文件 -size 按大小查找,以block为单位,一个block是512B -mtime n 按最后一次修改时间查找,选取n天内被修改的文件 -perm 按权限查找 -type 按文件类型查找 -atime按最后一次访问时间查找 例如:% find ./ -name '*abc*' -print 14. 搜索文件中匹配符 命令:grep 格式:grep [option] pattern filenames 功能:逐行搜索所指定的文件或标准输入,并显示匹配模式的每一行。 选项:-i匹配时忽略大小写 -v 找出模式失配的行 例如:% grep -i 'java*' ./test/run.sh 15. 统计文件字数 命令:wc [option] filename 功能:统计文件中的文件行数、字数和字符数。 选项:-l 统计文件的行数 -w 统计文件的单词数 -c 统计文件的字符数 注释:若缺省文件名则指标准输入 例如:% wc -c ./test/run.sh

Linux 中的每个进程都存在于“进程树”中。你可以通过运行 pstree 命令查看进程树。树的根是 init,进程号是 1。每个进程(init 除外)都有一个父进程,一个进程都可以有很多子进程。

所以,假设我要启动一个名为 ls 的进程来列出一个目录。我是不是只要发起一个进程 ls 就好了呢?不是的。

我要做的是,创建一个子进程,这个子进程是我(me)本身的一个克隆,然后这个子进程的“脑子”被吃掉了,变成 ls。

开始是这样的:

然后运行 fork(),生成一个子进程,是我(me)自己的一份克隆:

然后我让该子进程运行 exec("ls"),变成这样:

当 ls 命令结束后,我几乎又变回了我自己:

在这时 ls 其实是一个僵尸进程。这意味着它已经死了,但它还在等我,以防我需要检查它的返回值(使用 wait 系统调用)。一旦我获得了它的返回值,我将再次恢复独自一人的状态。

上文提到的“脑子被吃掉”是什么意思呢?

进程有很多属性:

当你运行 execve 并让另一个程序吃掉你的脑子的时候,实际上几乎所有东西都是相同的! 你们有相同的环境变量、信号处理程序和打开的文件等等。

唯一改变的是,内存、寄存器以及正在运行的程序,这可是件大事。

为何 fork 并非那么耗费资源(写入时复制)

你可能会问:“如果我有一个使用了 2GB 内存的进程,这是否意味着每次我启动一个子进程,所有 2 GB 的内存都要被复制一次?这听起来要耗费很多资源!”

事实上,Linux 为 fork() 调用实现了写时复制copy on write,对于新进程的 2GB 内存来说,就像是“看看旧的进程就好了,是一样的!”。然后,当如果任一进程试图写入内存,此时系统才真正地复制一个内存的副本给该进程。如果两个进程的内存是相同的,就不需要复制了

当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在内核里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从内核中取出子进程的退出信息,并清空该信息在内核中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。

当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在内核中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7488814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存