linux编程运行命令,如何运行linux程序
原标题:如何运行linux程序
搞懂linux程序如何运行是一件重要的事情,这是为我们进一步发展打下了坚实基础的一步。本文将通过实例来详细地讲解如何运行linux程序。希望对于大家理解有帮助。
首先,我们从一个十分简单的例子test.sh开始吧:#!/bin/sh #this is a test. cd /tmp echo "hello,this is a test"
这是一个十分简单的程序,但是运行结果可能会让你吃惊哦!
这个时候,我们发现程序运行之后,并没有改变当前目录。(黑人问号???)
别着急,我们先了解一下linux程序如何运行。
linux程序三种执行方法
运行linux程序有三种方法,分别是:
1、使文件具有可执行权限,直接运行文件。
chmod 命令用来修改文件的权限。+x是使文件拥有可执行的权限。就如上面我们运行程序一样。但是我们看到的结果与我们想象当中有一定的出入。
2、直接调用命令解释器执行程序。
如下图所示:
由于我们的解释器是/bin/sh,所以,用sh命令解释器来执行程序。
我们也看到当前的工作路径没有发生变化。(黑人问号???)
3、使用source执行文件。
没错,这里我们发现当前的工作路径发生了变化,(黑人问号???)但是究竟为什么呢?让我们带着三个黑人问号详细了解一下linux程序究竟怎么执行。
linux程序执行的过程
当命令行shell执行程序时,首先判断是否该程序具有可执行权限。如果没有可执行权限,就会提示:Permission denied(权限不够),如下图所示:
在第一种方法中,我们直接执行文件,就先加上了可执行权限。
当命令行接收到我们的执行命令,并且判断具有可执行权限后,则调用Linux内核命令新建一个进程,在新建的进程中调用指定的命令。但是我们的test.sh不是编译型的文件,所以linux内核不知道如何执行,然后交给shell,shell就知道这是一个脚本,那么就启动一个新的shell进程来进行执行。但是linux系统有很多shell,如图:
我们程序第一行看到是#!/bin/sh,这时,命令行就启用一个新的bash进程来执行程序。
程序执行差异
在我们运行shell程序的三种方法中,前两种方法的执行过程如下:
(1)父进程接收到命令,然后发现不是内建命令,于是创建了一个和自己一样的s h e l l进程,来执行这个外部命令
(2)这个s h e l l子进程用/bin/sh取代自己,sh进程设置自己的运行环境变量,其中包括了$PWD变量。
(3)sh进程依次执行内建命令cd和echo。在此过程中,sh进程(子进程)的环境变量被cd命令改变。
(4)子进程执行完毕,就消亡了,一直在等待的父进程醒来,继续接受命令。
所以我们明白了前两种方法执行结果跟我们预期不一样的原因,父进程的当前目录(环境变量)无法被子进程改变。
但是,使用source执行是shell脚本时不会创建子进程,而是在父进程中直接执行。至此黑人问号消失,继续加油写代码吧。
本文原创地址:http://www.linuxprobe.com/run-linux-program.html返回搜狐,查看更多
责任编辑:
linux编程运行命令,如何运行linux程序相关推荐
- linux的编程命令,linux编程常用命令
学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...
- linux命令删除sh文件,Linux下面使用命令如何运行.sh文件的两种解决办法 删除windows.old文件夹的解决...
延伸:删除windows.old文件夹的解决办法 描述:...行",这样就以管理员身份运行了cmd. 然后就很简单啦: 1 rd /S /Q c:\windows.old 注意,运行该命令后 ...
- linux环境下ps命令行,Linux下ps命令详解 Linux下ps命令的详细使用方法
Linux下ps命令详解 Linux上进程有5种状态:1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运 ...
- linux查看进程运行命令行参数,linux查看进程运行命令
Linux系统下想要查看运行中的进程,那我们该使用那个命令呢?下面由学习啦小编为大家整理了linux查看进程运行的命令的相关知识,希望对大家有帮助. 1.linux查看进程命令详解 ps命令查找与进程 ...
- linux常用核心命令大全(只写程序员常用的)
一.查看目录结构:cd/ls 根目录下的所有目录: linux有两种用户: ①root用户 /root ②home下的其他用户 /home/zhangsan list:列出 ll :查看当前目录下的文 ...
- 计算机运行命令如何关闭应用程序,如何禁止电脑中某些程序的运行
windows并没有一个简单的软件,能禁止那些不想让别人使用的程序,但是它本身有这个功能的,要做到也不难.那就是启用"不要运行指定的Windows应用程序"策略 .在组策略中有一条 ...
- linux的帮助命令及区别,linux经常使用命令以及帮助命令
做为自学者,首先须要学会的就是能看懂每一个命令的帮助文档,那么第一个须要掌握的Linux命令就应该是man. man命令 Linux下的帮助指令,经过man命令能够查看Linux中的命令帮助,配置文件 ...
- Linux基于bash命令实验报告,Linux操作系统实验报告1
Linux操作系统实验报告1 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...
- Linux下dislocate命令用法,在 Linux 中遨游手册页的海洋 | Linux 中国
原标题:在 Linux 中遨游手册页的海洋 | Linux 中国 Linux 系统上的手册页可以做的不仅仅是提供特定命令的信息.它们可以帮助你发现你没有意识到的命令. https://linux.cn ...
- linux下mtr命令,如何使用Linux mtr命令
对于经常和Linux打交道的技术人员来说,mtr命令是一个非常实用的Linux命令.它可以进行实时网络诊断.本篇文章分享了linux mtr命令的详细使用示例. 以下描述来自mtr命令的软件包信息. ...
最新文章
- crud springmvc
- Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式...
- 绅士计算机乐谱之谦,绅士(简单钢琴独奏版)
- Linux snmp
- 使用vue脚手架模块化开发
- C/C++ VS中调用matlab函数的方法
- 笔记本wifi做热点 android通过热点上网
- 设计模式学习笔记——观察者(Observer)模式
- java服务器端 —— 腾讯云直播开发接入(一)
- [MySQL]SQL优化工具SQLAdvisor
- 微信小程序:收款码三合一制作微信小程序源码下载多模板选择
- 图像处理软件ImageJ介绍与下载链接
- 计算机组成原理:计算机的分类
- 因特尔Edison第2站--mraa下gpio
- 遥感道路提取的补充C-UNet: Complement UNet for Remote Sensing Road Extraction
- Python进程池之pool.map()函数传入多参数
- 微信小程序routeDone错误问题
- 人工智能非技术从业者必知的十件事
- 学生成绩分等级 --if形式
- 用C语言编写一个申请内存的程序
热门文章
- centos7 ens33无故丢失
- python pynput鼠标键盘监控(详细)第2部键盘监控tcy
- 热衷于“二”的太二,囿于“酸菜鱼”
- 【新品发布】研扬科技首款深度学习AI服务器——AI Machine ARC-628横空问世
- linux inter开发板,研扬UP Squared物联网开发板
- 终于知道了,原来女程序员才是真正的宝藏女孩
- WPF学习之路(五) 实例:写字板(续)
- C P U的指令系统又称为什么语言,全国自考(微型计算机原理与接口技术)模拟试卷9...
- android webview 清除历史,如何在android中清除webview历史记录
- Boost(1):Boost库简介及安装