美文网首页
shell程序如何运行的(另附shell源码)

shell程序如何运行的(另附shell源码)

作者: 荷叶的莲藕 | 来源:发表于2019-01-24 15:22 被阅读0次

shell程序如何运行的

一个shell主循环执行下面的4步

1.用户输入a.out
2.shell建立一个新的进程来运行这个程序。
3.shell将程序从磁盘载入;
4.程序在它的进程中运行直到结束。

#include <stdio.h>
#include <stdlib.h>
main()
{
        char * arglist[3];

        arglist[0] = "ls";
        arglist[1] = "-l";
        arglist[2] = NULL;
        printf("*** About to exec ls -l\n");
        execvp("ls",arglist);
        printf("*** ls is done. bye\n");
}

​ 一个程序在一个进程中运行---也就是一些内存和内核中相应的数据结构。这样,execvp将程序从磁盘载入进程以便它可以被运行。
exec系统调用从当前进程中把当前程序的机器指令清楚,然后再空的进程中载入调用时指定的程序代码,最后运行这个新的程序。exec调整进程的内存分配使之适应新的程序对内存的要求。相同的进程,不同的内容。

下面是最原始的shell程序

#include<stdio.h>
#include<signal.h>
#include<string.h>

#define MAXARGS 20
#define ARGLEN 100
int main()
{
    char * arglist[MAXARGS +1];
    int numargs;
    char argbuf[ARGLEN];
    char * makestring();
    numargs = 0;
    while(numargs<MAXARGS)
    {
        printf("Arg[%d]?",numargs);
        if(fgets(argbuf,ARGLEN,stdin)&&argbuf!='\n')
            arglist[numargs++]=makestring(argbuf);
        else
        {
            if(numargs>0)
            {
                arglist[numargs]=NULL;
                execute(arglist);
                numargs = 0;
            }
        }
    }
    return 0;
}
int execute(char * arglist[])
{
    execvp(arglist[0],arglist);
    perror("execvp failed");
    exit(1);
}
char * makestring(char *buf)
{
    char *cp ,*malloc();
    buf[strlen(buf)-1]='\0';
    cp = malloc(strlen(buf)+1);
    if(cp == NULL)
    {
        fprintf(stderr,"no memory\n");
        exit(1);
    }
    strcpy(cp,buf);
    return cp;
}

相关文章

  • shell程序如何运行的(另附shell源码)

    shell程序如何运行的 一个shell主循环执行下面的4步 1.用户输入a.out2.shell建立一个新的进程...

  • shell脚本

    1.建立和运行shell程序 什么是shell程序呢? 简单的说shell程序就是一个包含若干行shell或者li...

  • FFmpeg开发--C语言回顾

    运行Hello World Shell运行Hello World程序: Shell运行Demo: 内存泄露与野指针...

  • shell 语法

    shell 语法如何抒写一个shell脚本shell脚本运行shell中的特殊符号管道重定向shell中数学运算脚...

  • Shell函数操作总结

    Shell函数操作 echo #! /bin/bashecho "Hello World !" 如何运行shell...

  • Shell/bash语法, since 2020-10-26

    Shell是什么? (2020.10.31 Sat)Shell是运行在terminal中的文本互动程序,其分析文本...

  • 05-Shell编程

    一、shell编程 1.简介 1.1什么是shell 把在终端运行的命令保存到文件中,这个文件就是shell程序简...

  • shell变量

    Shell变量 前面通过简单的程序了解了Shell的编辑和运行过程,这一节主要学习Shell的变量。 1.变量定义...

  • Shell环境变量

    bash shell中使用环境变量在内存中存储有关shell会话和工作环境的数据。以便程序或shell中运行的脚本...

  • arthas源码解析

    1.运行脚本 下载as shell脚本 选择个java 进程后shell脚本会去运行个java程序 同时带上了进程...

网友评论

      本文标题:shell程序如何运行的(另附shell源码)

      本文链接:https://www.haomeiwen.com/subject/irzyjqtx.html