原标题:如何运行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程序相关推荐

  1. linux的编程命令,linux编程常用命令

    学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...

  2. linux命令删除sh文件,Linux下面使用命令如何运行.sh文件的两种解决办法 删除windows.old文件夹的解决...

    延伸:删除windows.old文件夹的解决办法 描述:...行",这样就以管理员身份运行了cmd. 然后就很简单啦: 1 rd /S /Q c:\windows.old 注意,运行该命令后 ...

  3. linux环境下ps命令行,Linux下ps命令详解 Linux下ps命令的详细使用方法

    Linux下ps命令详解 Linux上进程有5种状态:1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运 ...

  4. linux查看进程运行命令行参数,linux查看进程运行命令

    Linux系统下想要查看运行中的进程,那我们该使用那个命令呢?下面由学习啦小编为大家整理了linux查看进程运行的命令的相关知识,希望对大家有帮助. 1.linux查看进程命令详解 ps命令查找与进程 ...

  5. linux常用核心命令大全(只写程序员常用的)

    一.查看目录结构:cd/ls 根目录下的所有目录: linux有两种用户: ①root用户 /root ②home下的其他用户 /home/zhangsan list:列出 ll :查看当前目录下的文 ...

  6. 计算机运行命令如何关闭应用程序,如何禁止电脑中某些程序的运行

    windows并没有一个简单的软件,能禁止那些不想让别人使用的程序,但是它本身有这个功能的,要做到也不难.那就是启用"不要运行指定的Windows应用程序"策略 .在组策略中有一条 ...

  7. linux的帮助命令及区别,linux经常使用命令以及帮助命令

    做为自学者,首先须要学会的就是能看懂每一个命令的帮助文档,那么第一个须要掌握的Linux命令就应该是man. man命令 Linux下的帮助指令,经过man命令能够查看Linux中的命令帮助,配置文件 ...

  8. Linux基于bash命令实验报告,Linux操作系统实验报告1

    Linux操作系统实验报告1 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...

  9. Linux下dislocate命令用法,在 Linux 中遨游手册页的海洋 | Linux 中国

    原标题:在 Linux 中遨游手册页的海洋 | Linux 中国 Linux 系统上的手册页可以做的不仅仅是提供特定命令的信息.它们可以帮助你发现你没有意识到的命令. https://linux.cn ...

  10. linux下mtr命令,如何使用Linux mtr命令

    对于经常和Linux打交道的技术人员来说,mtr命令是一个非常实用的Linux命令.它可以进行实时网络诊断.本篇文章分享了linux mtr命令的详细使用示例. 以下描述来自mtr命令的软件包信息. ...

最新文章

  1. crud springmvc
  2. Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式...
  3. 绅士计算机乐谱之谦,绅士(简单钢琴独奏版)
  4. Linux snmp
  5. 使用vue脚手架模块化开发
  6. C/C++ VS中调用matlab函数的方法
  7. 笔记本wifi做热点 android通过热点上网
  8. 设计模式学习笔记——观察者(Observer)模式
  9. java服务器端 —— 腾讯云直播开发接入(一)
  10. [MySQL]SQL优化工具SQLAdvisor
  11. 微信小程序:收款码三合一制作微信小程序源码下载多模板选择
  12. 图像处理软件ImageJ介绍与下载链接
  13. 计算机组成原理:计算机的分类
  14. 因特尔Edison第2站--mraa下gpio
  15. 遥感道路提取的补充C-UNet: Complement UNet for Remote Sensing Road Extraction
  16. Python进程池之pool.map()函数传入多参数
  17. 微信小程序routeDone错误问题
  18. 人工智能非技术从业者必知的十件事
  19. 学生成绩分等级 --if形式
  20. 用C语言编写一个申请内存的程序

热门文章

  1. centos7 ens33无故丢失
  2. python pynput鼠标键盘监控(详细)第2部键盘监控tcy
  3. 热衷于“二”的太二,囿于“酸菜鱼”
  4. 【新品发布】研扬科技首款深度学习AI服务器——AI Machine ARC-628横空问世
  5. linux inter开发板,研扬UP Squared物联网开发板
  6. 终于知道了,原来女程序员才是真正的宝藏女孩
  7. WPF学习之路(五) 实例:写字板(续)
  8. C P U的指令系统又称为什么语言,全国自考(微型计算机原理与接口技术)模拟试卷9...
  9. android webview 清除历史,如何在android中清除webview历史记录
  10. Boost(1):Boost库简介及安装