精华内容
下载资源
问答
  • 端口占用

    昨天晚上服务器莫名其妙的挂掉了,今天早上来了后,紧紧张张的改,第一次弄这个东西,又去网上找资料,很多人说的方法都差不多,但模棱两可,而且没有具体的解决步骤,真是坑坑坑。领导又一次催促了,我也很着急啊。最终我终于顺利解决这个问题。现在将问题解决步骤详细记录下来。
    如果有看到我文章的,请关注我的博客,并给我写的每篇博客点个赞。哈哈。

    问题描述:
    启动Linux服务器上的tomcat,出现以下问题:

    java.net.BindException: Address already in use <null>:8092

    不难理解,意思是8092端口已经被占用了。

    解决办法:
    打开终端

    [root@gft ~]# cd /sda/home/tomcat-6.0-saltCtredit

    看是否已经有tomcat在运行了

    [root@gft tomcat-6.0-saltCtredit]# ps -ef |grep tomcat
    //发现共有3个进程在运行tomcat,其中一个1850进程号是其它的项目,不用管它。
    //而2254和4130端口,运行的都是我们出错误的项目。需要杀掉这两个进程,然后重新启动tomcat。

    彻底杀死运行tomcat的进程号

    [root@gft tomcat-6.0-saltCtredit]# kill -9 2254
    [root@gft tomcat-6.0-saltCtredit]# kill -9 4130

    再次查看运行tomcat的进程,发现多余的两个进程成功杀死。

    [root@gft tomcat-6.0-saltCtredit]# ps -ef|grep tomcat

    重新启动tomcat,成功解决问题。

    [root@gft tomcat-6.0-saltCtredit]# bin/startup.sh 

    附:
    启动tomcat,在tomcat的根目录下执行命令,如:/sda/home/tomcat-6.0-saltCtredit

    bin/startup.sh

    停止tomcat

    bin/shutdown.sh

    查看tomcat的控制台输出

    tail -f logs/catalina.out

    解决问题的详细控制台信息:

    Last login: Wed Oct 19 09:42:42 2016 from 211.88.72.75
    [root@gft ~]# cd /sda/home/tomcat-6.0-saltCtredit
    [root@gft tomcat-6.0-saltCtredit]# 
    [root@gft tomcat-6.0-saltCtredit]# ps -ef |grep tomcat
    root      1850     1  0 Oct18 ?        00:03:03 /sda/java/jdk1.6.0_07/jre/bin/java -Djava.util.logging.config.file=/sda/home/tomcat-zbpt/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/sda/home/tomcat-zbpt/endorsed -classpath /sda/home/tomcat-zbpt/bin/bootstrap.jar -Dcatalina.base=/sda/home/tomcat-zbpt -Dcatalina.home=/sda/home/tomcat-zbpt -Djava.io.tmpdir=/sda/home/tomcat-zbpt/temp org.apache.catalina.startup.Bootstrap start
    root      2254     1  6 Oct18 ?        01:40:23 /sda/java/jdk1.6.0_07/jre/bin/java -Djava.util.logging.config.file=/sda/home/tomcat-6.0-saltCtredit/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/sda/home/tomcat-6.0-saltCtredit/endorsed -classpath /sda/home/tomcat-6.0-saltCtredit/bin/bootstrap.jar -Dcatalina.base=/sda/home/tomcat-6.0-saltCtredit -Dcatalina.home=/sda/home/tomcat-6.0-saltCtredit -Djava.io.tmpdir=/sda/home/tomcat-6.0-saltCtredit/temp org.apache.catalina.startup.Bootstrap start
    root      4130     1 20 09:44 ?        00:00:41 /sda/java/jdk1.6.0_07/jre/bin/java -Djava.util.logging.config.file=/sda/home/tomcat-6.0-saltCtredit/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/sda/home/tomcat-6.0-saltCtredit/endorsed -classpath /sda/home/tomcat-6.0-saltCtredit/bin/bootstrap.jar -Dcatalina.base=/sda/home/tomcat-6.0-saltCtredit -Dcatalina.home=/sda/home/tomcat-6.0-saltCtredit -Djava.io.tmpdir=/sda/home/tomcat-6.0-saltCtredit/temp org.apache.catalina.startup.Bootstrap start
    root      4196  4176  0 09:48 pts/0    00:00:00 grep tomcat
    [root@gft tomcat-6.0-saltCtredit]# kill -9 pid 2254
    -bash: kill: pid: arguments must be process or job IDs
    [root@gft tomcat-6.0-saltCtredit]# kill -9 2254
    -bash: kill: (2254) - No such process
    [root@gft tomcat-6.0-saltCtredit]# kill -9 4130
    [root@gft tomcat-6.0-saltCtredit]# ps -ef|grep tomcat
    root      1850     1  0 Oct18 ?        00:03:03 /sda/java/jdk1.6.0_07/jre/bin/java -Djava.util.logging.config.file=/sda/home/tomcat-zbpt/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/sda/home/tomcat-zbpt/endorsed -classpath /sda/home/tomcat-zbpt/bin/bootstrap.jar -Dcatalina.base=/sda/home/tomcat-zbpt -Dcatalina.home=/sda/home/tomcat-zbpt -Djava.io.tmpdir=/sda/home/tomcat-zbpt/temp org.apache.catalina.startup.Bootstrap start
    root      4202  4176  0 09:51 pts/0    00:00:00 grep tomcat
    [root@gft tomcat-6.0-saltCtredit]# bin/startup.sh 
    Using CATALINA_BASE:   /sda/home/tomcat-6.0-saltCtredit
    Using CATALINA_HOME:   /sda/home/tomcat-6.0-saltCtredit
    Using CATALINA_TMPDIR: /sda/home/tomcat-6.0-saltCtredit/temp
    Using JRE_HOME:        /sda/java/jdk1.6.0_07/jre
    Using CLASSPATH:       /sda/home/tomcat-6.0-saltCtredit/bin/bootstrap.jar
    [root@gft tomcat-6.0-saltCtredit]# 

    附:
    我现在工作项目的部署方案
    这里写图片描述

    Last login: Thu Oct 20 09:40:56 2016 from 211.88.72.75
    //跳转到tomcat的bin路径下
    [root@gft ~]# cd /sda/home/tomcat-6.0-saltCtredit/bin
    //停掉tomcat
    [root@gft bin]# ./catalina.sh stop
    Using CATALINA_BASE:   /sda/home/tomcat-6.0-saltCtredit
    Using CATALINA_HOME:   /sda/home/tomcat-6.0-saltCtredit
    Using CATALINA_TMPDIR: /sda/home/tomcat-6.0-saltCtredit/temp
    Using JRE_HOME:        /sda/java/jdk1.6.0_07/jre
    Using CLASSPATH:       /sda/home/tomcat-6.0-saltCtredit/bin/bootstrap.jar
    //清掉tomcat缓存
    [root@gft bin]# rm -rf /sda/home/tomcat-6.0-saltCtredit/work/Catalina
    //重新启动tomcat
    [root@gft bin]# ./catalina.sh start
    Using CATALINA_BASE:   /sda/home/tomcat-6.0-saltCtredit
    Using CATALINA_HOME:   /sda/home/tomcat-6.0-saltCtredit
    Using CATALINA_TMPDIR: /sda/home/tomcat-6.0-saltCtredit/temp
    Using JRE_HOME:        /sda/java/jdk1.6.0_07/jre
    Using CLASSPATH:       /sda/home/tomcat-6.0-saltCtredit/bin/bootstrap.jar
    [root@gft bin]# 
    
    展开全文
  • [Linux] 关闭某个被占用端口的方法

    千次阅读 2014-02-04 13:44:52
    有时由于某种原因,某个端口被占用,如5432,这时如果想关闭这个端口怎么做呢? 1.首先用如下命令查看端口占用情况: [root@localhost local]# netstat -ano 2.然后查看占用5432端口的程序pid: [root@...

    [转载地址] http://blog.sciencenet.cn/blog-419883-662063.html

    有时由于某种原因,某个端口被占用,如5432,这时如果想关闭这个端口怎么做呢?

    1.首先用如下命令查看端口占用情况:
    [root@localhost local]# netstat -ano

    2.然后查看占用5432端口的程序pid:
    [root@localhost local]# lsof -i:5432
    COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    postgres 7035 postgres    3u  IPv6 516068      0t0  TCP localhost:postgres (LISTEN)
    postgres 7035 postgres    4u  IPv4 516069      0t0  TCP localhost:postgres (LISTEN)

    3.kill掉该进程
    [root@localhost local]# kill -9 7035
    展开全文
  • linux驱动程序接口

    千次阅读 2017-03-16 18:31:03
    1. Linux驱动程序接口 系统调用是操作系统内核与应用程序之间的接口,设备驱动程序则是操作系统内核与机器硬件的接口。几乎所有的系统操作最终映射到物理设备,除了CPU、内存 和少数其它设备,所有的设备控制操作都...
    1. Linux驱动程序接口

    系统调用是操作系统内核与应用程序之间的接口,设备驱动程序则是操作系统内核与机器硬件的接口。几乎所有的系统操作最终映射到物理设备,除了CPU、内存 和少数其它设备,所有的设备控制操作都由该设备特殊的可执行代码实现,此代码就是设备驱动程序。操作系统内核需要访问两类主要设备:字符设备和块设备。与 此相关主要有两类设备驱动程序,字符设备驱动程序和块设备驱动程序。Linux(也是所有UNIX)的基本原理之一是:系统试图使它对所有各类设备的输 入、输出看起来就好象对普通文件的输入、输出一样。设备驱动程序本身具有文件的外部特征,它们都能使用象
    open(),close(),read(),write()等系统调用。为使设备的存取能象文件一样处理,所有设备在目录中应有对应的文件名称,才可使用有关系统调用。
    通常Linux驱动程序接口分为如下四层:
    1).应用程序进程与内核的接口;
    2).内核与文件系统的接口;
    3).文件系统与设备驱动程序的接口;
    4).设备驱动程序与硬件设备的接口。
    §2. 驱动程序文件操作数据结构

    每个驱动程序都有一个file-operation的数据结构,包含指向驱动程序内部函数的指针。file-operation的数据结构为:
    struct file-operation {
    int (*lseek)();
    int (*read)();
    int (*write)();
    int (*readdir)();
    int (*select)();
    int (*ioctl)();
    int (*mmap)();
    int (*open)();
    int (*close)();
    int (*release)();
    int (*fsync)();
    int (*fasync)();
    int (*check-media-change)();
    int (*revalidate)();
    }
    内核中有两个表,一个用于字符设备驱动程序,一个用于块设备驱动程序。这两个表用于保存指向file-operation数据结构的指针,驱动程序内部函 数的地址保存在这一结构。内核用主设备号作为索引访问file-operation结构,可以访问驱动程序子程序地址。SBS617设备采用了PCI总线 字符设备的驱动程序实现方式。完成了设备驱动程序,经GNU软件编译,链接,产生一可加载模块,可以用于动态装入Linux操作系统内核,也可以在需要时 从内核中卸除。

    §3. file_operations介绍
    在结构file_operations里,指出了设备驱动程序所提供的入口点位置,分别是:
    (1) lseek,移动文件指针的位置,显然只能用于可以随机存取的设备。
    (2) read,进行读操作,参数buf为存放读取结果的缓冲区,count为所要读取的数据长度。返回值为负表示读取操作发生错误,否则返回实际读取的字节 数。对于字符型,要求读取的字节数和返回的实际读取字节数都必须是inode->i_blksize的的倍数。
    (3) write,进行写操作,与read类似。
    (4) readdir,取得下一个目录入口点,只有与文件系统相关的设备驱动程序才使用。
    (5) selec,进行选择操作,如果驱动程序没有提供select入口,select操作将会认为设备已经准备好进行任何的I/O操作。
    (6) ioctl,驱动程序特殊控制入口点,进行读、写以外的其它操作,参数cmd为自定义的命令。 这是很有意思的部分,之后我会详尽介绍;
    (7) mmap,用于把设备的内容映射到地址空间,一般只有块设备驱动程序使用。
    (8) open,打开设备准备进行I/O操作。返回0表示打开成功,返回负数表
    示失败。如果驱动程序没有提供open入口,则只要/dev/driver文件存
    在就认为打开成功。
    (9) release,即close操作。
    设备驱动程序所提供的入口点,在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。

    §4 PCI字符设备驱动程序

    要设计PCI设备驱动程序,必须进一步结合硬件设备和PCI总线的特性。设计PCI设备驱动程序的重要任务是找寻相应的硬件并实现对它的访问。作为外围设 备的硬件必须响应三种地址空间的访问,即内存,IO,寄存器地址空间。前两种地址空间可以为PCI总线上的所有设备共享。寄存器空间占用物理地址,可以通 过特殊的函数来访问配置寄存器。一旦可以访问配置寄存器,设备驱动程序就可以访问硬件了。每个设备的PCI配置寄存器均由256Bytes构成,其中 64Bytes是标准化的,4Bytes标识了一个唯一的函数ID,通过这个ID驱动程序就可以定位该设备。
    存取系统中的字符设备和存取系统文件一样。应用程序使用标准的系统调用来打开、读写和关闭设备,就像使用一个文件-样。当字符设备初始化时,通过向 chrdevs数组中添加一个入口,设备驱动程序在系统内核中注册。 chrdevs数组由device_struct数据结构组成。设备的主设备号用来作为此chrdevs的索引,因为一个设备的主设备号是固定的。

    LINUX系统里,通过调用register_chrdev向系统注册字符型设备驱动程序。register_chrdev定义为:
    #include linux/fs.h
    #include linux/errno.h
    int register_chrdev(unsigned int major, const char *name,
    struct file_operations *fops);
    其中,major是为设备驱动程序向系统申请的主设备号,如果为0则系统为此驱动程序动态地分配一个主设备号。name是设备名。fops就是前面所说的 对各个调用的入口点的说明。此函数返回0表示成功。返回-EINVAL表示申请的主设备号非法,一般来说是主设备号大于系统所允许的最大设备号。返回- EBUSY表示所申请的主设备号正在被其它设备驱动程序使用。如果是动态分配主设备号成功,此函数将返回所分配的主设备号。

    §5 PCI设备启动与检测

    PC主板BIOS在系统启动时,可以自动检测PCI设备并配置设备的每一地址区。当驱动程序访问设备时,它的内存、I/O地址空间已经映射到进程的地址空 间了。在驱动程序init_module()中,通过调用函数pcibios_find_device()函数返回设备在总线上的位置及函数指针,其中的 包含文件及函数原型为:

    #include Linux/pci.h
    #include Linux/config.h
    #include Linux/bios32.h
    int pcibios_find_device(unsigned short vendor,
    unsigned short id, unsigned short index,
    unsigned char *bus, unsigned short *function)

    §6 地址空间访问

    在设备驱动程序检测到设备之后,通常要从三个地址空间读写数据,其中寄存器空间的读写尤为重要,因为只有通过它驱动程序才可能找到设备内存和I/O空间的映射地址。设备驱动程序通过调用以下函数实现寄存器空间的访问,其中的包含文件及函数原型为:

    #include Linux/bios32.h
    int pcibios_read_config_byte( unsigned char bus,
    unsigned char function,
    unsigned char where,
    unsigned char b*ptr)

    int pcibios_write_config_byte(unsigned char bus,
    unsigned char function,
    unsigned char where,
    unsigned char b*ptr)

    类似的还有:
    pcibios_read_config_word (), pcibios_write_config_word () ,
    pcibios_read_config_dword () ,pcibios_write_config_dword() 调用。
    PCI设备最多有6个地址区,类型可以为内存区或I/O区。接口板可以通过配置寄存器的PCI_BASE_ADDRESS_0 到PCI_BASE_ADDRESS_5来报告各地址区的实际地址位置。内存、IO空间的访问通过inb(),memcpy()等调用。当然可以通过 pcibios_read_config_byte(),pcibios_write_config_byte() 来访问配置寄存器的相应基地址值。

    §7 中断处理


    对中断的处理是属于系统核心的部分, PC主板BIOS为多数设备分配了一个唯一的中断号,在配置寄存器中保存, 设备驱动程序通过pcibios_read_config_byte() 函数读取相应的值,格式为:

    xxx_irq=pcibios_read_config_byte(pci_bus,pci_device_fn,
    PCI_INTERRUPT_LINE,
    &pci_cofig->int_line)

    操作系统中有中断寄存器,将特定的中断请求与中断处理函数联系在一起,当中断发生时调用相应的中断处理函数处理。Linux操作系统下可用request_irq(),free_irq( )实现中断的请求,释放,其中包含文件及形式为:

    #include Linux/sched.h
    int request_irq(unsigned int irq,
    void (*handler)(int irq,void dev_id,struct pt_regs *regs),
    unsigned long flags,
    const char *device,
    void *dev_id);
    void free_irq(unsigned int irq, void *dev_id);
    参数irq表示所要申请的硬件中断号。handler为向系统登记的中断处理子程序,中断产生时由系统来调用,调用时所带参数irq为中断号, dev_id为申请时告诉系统的设备标识,regs为中断发生时寄存器内容。device为设备名,将会出现在/proc/interrupts文件里。
    flag是申请时的选项,它决定中断处理 程序的一些特性,有两种方式写中断方式设备驱动程序:即快中断方式和定时等待方式。采取快中断方式需要将request_irq()的第三个type类型 参数设为SA_INTERRUPT。 正常中断与快中断的区别在于: 从正常中断返回时,内核可以利用机会调度更优先的进程执行; 而快中断不进行调度立即恢复被中断程序的执行.
    在LINUX系统中,中断可以被不同的中断处理程序共享,这要求每一个共享此中断的处理程序在申请中断时在flags里设置SA_SHIRQ,这些处理程 序之间以dev_id来区分。如果中断由某个处理程序独占,则dev_id 可以为NULL。request_irq返回0表示成功,返回-INVAL表示irq>15或 handler==NULL,返回-EBUSY表示中断已经被占用且不能共享。

    中断处理函数形式为:

    void xxx_irq_handler(int xxx_irq,void *dev_id,
    struct pt_regs *regs)

    §8 特殊控制函数ioctl()

    ioctl()具有设备特殊性,不同于read() , write(),在于它允许应用程序访问、配置设备,并进入可能的操作模式。 通常的read()、write()不能使用这些控制操作。ioctl()可以控制I/O通道。设备驱动的一个特点是要与其它设备硬件交换读/写的数据并 需要同步控制。
    多数的ioctl()由一系列的switch语句组成, ioctl()命令及操作选择考虑到硬件的特性和实际要实现的功能。写ioctl()程序之前,应选择相应的命令,不应该简单使用1-N的数字。选择ioctl()的命令有以下的考虑:
    ·首先命令码在系统中应该唯一,以避免与其它设备冲突,每个命令码应由多个比特域构成。
    · 参考两个文件来帮助选择ioctl()的命令,include/asm/ioctl.h及Documentation/ioctl_number.txt 有如下定义:
    命令码有四个8比特组,其相应取值的宏定义及含义如下表:

    命令码取值宏定义及含义
    比特组名称 取值宏定义 含义
    type _IOC_TYEBITS 表示每个驱动程序唯一的类型标识
    number _IOC_NRBITS 表示序列号
    direction _IOC_NONE, _IOC_READ,
    _IOC_WRITE,_IOC_READ|WRITE 表示数据传输的方向
    size _IOC_SIZEBITS 表示传输数据的大小

    在头文件< asm/ioctl.h >中定义了设置命令码的一些有用的宏:
    _IO(type,nr);
    _IOR(type,nr,size);
    _IOW(type,nr,size);
    _IOC_DIR(nr);
    _IOC_TYPE(nr);
    _IOC_NR(nr);
    _IOC_SIZE(nr);

    这些设置与具体的硬件功能有关,可以参考有关的硬件手册。通过以上方式可以设置命令、获得设备参数及实现控制操作, 完成设备驱动程序的重要功能。
    对于设备驱动程序,ioctl() 函数非常重要,用户可以通过它来控制设备函数,获取状态信息,进行数据的读写。
    ioctl()在用户空间的形式为:

    int (*ioctl)(struct inode *inode , struct file *file ,
    unsigned int cmd , unsigned long arg)

    其中cmd相当于一个选择码,取决于使用的特殊控制命令,cmd命令通常在头文件中声明。直接的调用的格式为:

    temp = ioctl( fd, XX_xxxx, param* );

    \"fd\"是设备文件句柄。XX_xxxx 是控制码。Param是一个参数结构的指针,当调用 ioctl()时,需要理解一些特殊参数结构 ,可以参考下面的四个表格。返回值0表示成功,-1失败。

    §9.调用Linux内核函数

    Linux有许多内核函数可以调用。例如;

    1)memcpy_fromfs( *toptr, *fromptr, sizeof());
    // 用于从文件系统传输数据
    2) memcpy_tofs ( *toptr, *fromptr, sizeof());
    // 用于将数据传输到文件系统
    #include asm/segment.h
    void memcpy_fromfs(void * toptr,const void * fromptr,unsigned long n);
    void memcpy_tofs(void * toptr,const void * fromptr,unsigned long n);
    在用户程序调用read 、write时,因为进程的运行状态由用户态变为核心 态,地址空间也变为核心地址空间。而read、write中参数buf是指向用户程 序的私有地址空间的,所以不能直接访问,必须通过上述两个系统函数来访问用户程序的私有地址空间。memcpy_fromfs由用户程序地址空间往核心地 址空间复制,memcpy_tofs则反之。参数toptr为复制的目的指针,fromptr为源指针,n 为要复制的字节数。

    3) ptr = vmalloc( sizeof() );// 动态分配内存
    4) vfree( ptr ); // 动态释放内存
    5) vremap( xxx_mapping[ chn ].pci_addr,
    xxx_mapping[ chn ].len );
    // 映射PCI地址,
    chn = current_map_chn.

    6)作为系统核心的一部分,设备驱动程序在申请和释放内存时不是调用malloc
    和free,而调用kmalloc和kfree,定义为:
    #include linux/kernel.h
    void * kmalloc(unsigned int len, int priority);
    void kfree(void * ptr);
    参数len为希望申请的字节数,ptr为要释放的内存指针。priority为分配内存操作的优先级,即在没有足够空闲内存时如何操作,一般用GFP_KERNEL。
    7)与中断和内存不同,使用一个没有申请的I/O端口不会使CPU产生异常, 也
    就不会导致诸如\"segmentation fault\"一类的错误发生。任何进程都可以访问
    任何一个I/O端口。此时系统无法保证对I/O端口的操作不会发生冲突,甚至会因此而使系统崩溃。因此,在使用I/O端口前,也应该检查此I/O端口是否已有 别的程序在使用,若没有,再把此端口标记为正在使用,在使用完以后释放它。
    这样需要用到如下几个函数:
    int check_region(unsigned int from, unsigned int extent);
    void request_region(unsigned int from, unsigned int extent,
    const char *name);
    void release_region(unsigned int from, unsigned int extent);
    调用这些函数时的参数为:from表示所申请的I/O端口的起始地址;
    extent为所要申请的从from开始的端口数;name为设备名,将会出现在
    /proc/ioports文件里。check_region返回0表示I/O端口空闲,否则为正在
    被使用。
    在申请了I/O端口之后,就可以如下几个函数来访问I/O端口:
    #include asm/io.h
    inline unsigned int inb(unsigned short port);
    inline unsigned int inb_p(unsigned short port);
    inline void outb(char value, unsigned short port);
    inline void outb_p(char value, unsigned short port);
    其中inb_p和outb_p插入了一定的延时以适应某些慢的I/O端口。
    9)在设备驱动程序里,一般都需要用到计时机制。在LINUX系统中,时钟是
    由系统接管,设备驱动程序可以向系统申请时钟。与时钟有关的系统调用有:
    #include asm/param.h
    #include linux/timer.h
    void add_timer(struct timer_list * timer);
    int del_timer(struct timer_list * timer);
    inline void init_timer(struct timer_list * timer);
    struct timer_list的定义为:
    struct timer_list {
    struct timer_list *next;
    struct timer_list *prev;
    unsigned long expires;
    unsigned long data;
    void (*function)(unsigned long d);
    };
    其中expires是要执行function的时间。系统核心有一个全局变量JIFFIES
    表示当前时间,一般在调用add_timer时jiffies=JIFFIES+num,表示在num个
    系统最小时间间隔后执行function。系统最小时间间隔与所用的硬件平台有关,在核心里定义了常数HZ表示一秒内最小时间间隔的数目,则num*HZ 表示num 秒。系统计时到预定时间就调用function,并把此子程序从定时队列里删除,因此如果想要每隔一定时间间隔执行一次的话,就必须在function里 再一次调用add_timer。function的参数d即为timer里面的data项。
    10)在设备驱动程序里,还可能会用到如下的一些系统函数:
    #include asm/system.h
    #define cli() __asm__ __volatile__ (\"cli\"::)
    #define sti() __asm__ __volatile__ (\"sti\"::)
    这两个函数负责打开和关闭中断允许。
    11)在设备驱动程序里,可以调用printk来打印一些调试信息,用法与printf 类似。
    printk打印的信息不仅出现在屏幕上,同时还记录在文件syslog里。
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(1268) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
    展开全文
  • linux查看具体进程占用的网络流量

    万次阅读 2020-01-09 14:02:28
    1、iftop 2、vnstat 3、IPTraf 4、Monitorix – 系统和网络监视 5、dstat 6、bwm-ng 7、ibmonitor 8、Htop – Linux 进程跟踪 9、arpwatch – 以太网活动监视器 10、Wireshark – 网络监视工具 ...

    监控网络宽带(网速)的18个命令

    下面是按功能划分的命令名称。

    监控总体带宽使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload
    
    监控总体带宽使用(批量式输出)――vnstat、ifstat、dstat和collectl
    
    每个套接字连接的带宽使用――iftop、iptraf、tcptrack、pktstat、netwatch和trafshow
    
    每个进程的带宽使用――nethogs
    

    10 个不错的网络监视工具

    1、iftop
    2、vnstat
    3、IPTraf
    4、Monitorix – 系统和网络监视
    5、dstat
    6、bwm-ng
    7、ibmonitor
    8、Htop – Linux 进程跟踪
    9、arpwatch – 以太网活动监视器
    10、Wireshark – 网络监视工具
    http://www.safebase.cn/article-257139-1.html

    nethogs

    nethogs是一款小巧的"net top"工具,可以显示每个进程所使用的带宽,并对列表排序,将耗用带宽最多的进程排在最上面。万一出现带宽使用突然激增的情况,用户迅速打开nethogs,就可以找到导致带宽使用激增的进程。nethogs可以报告程序的进程编号(PID)、用户和路径。

    yum install -y nethogs
    nethogs
    nethogs eth1   //只查看eth1网卡(默认)的信息
    nethogs -d 5    //查看,每5秒刷新一次
    

    展开全文
  • 进程管理Windows 系统一、netstat (显示协议统计信息和当前 TCP/IP 网络连接)1.帮助使用格式:`netstat [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]`2.常用命令`netstat -a`(显示...
  • Linux驱动程序接口

    千次阅读 2012-10-17 16:20:51
    原文:... 正如Linux torvalds 所说\"we\re back to the times when men were men and wrote their device drivers\",come on ,then! 以下我将我的小心得与大家分享,并请高手指点江山啊!
  • 服务器某程序固定占用某端口,每次通过 lsof -i:端口号 然后用kill -9 ,把进程杀死掉。...进程确定占用某一tcp端口,如下命令可以杀掉该进程。 kill -9 $(netstat -tlnp|grep 1099|awk '{print $7}'|awk -
  • LINUX网络性能之管理工具三剑客 本文是介绍管理Linux查看端口这些输出信息,该命令将显示从每个数据包传出的头和来自主机hostname对端口80的编址。    Netstat -tln 命令是Linux查看端口使用情况  /etc/init.d...
  • unix/linux c函数接口大全

    千次阅读 2016-04-17 21:22:24
    linux,unix,c,网络,socket,线程,进程
  • Windows和Linux的远程连接(都叫做远程连接吧)不同: 1)Windows远程连接后,如果在远程机器上运行某个程序,完全可以退出连接后过一段时间再连接到那台机器上看有没有结束,即Windows的远程连接在不经过任何处理的...
  • Linux UART接口调试技巧

    万次阅读 2017-03-03 10:27:14
    本文将梳理UART接口调试流程,为调试工作提供参考,解决调试过程中可能遇到的问题,快速完成UART接口调试,实现模块功能。配置驱动选项首先查看原理图确认串口号,比如UART1,同时查看该串口引脚是否有复用功能,...
  • 解决linux端口被占用

    2017-08-02 23:14:49
    解决端口占用问题的最快捷方式就是杀死相关进程,以杀死占用22端口的ssh为例 查看进程 如图所示,对应的进程名为sshd 进程号为 55312 输入kill -9 55321 杀死进程 lsof -i:22 终端查看进程 ` 杀死进程后,...
  • linux 端口被占用解决

    2017-03-21 09:21:22
    有时候关闭软件后,后台进程死掉,导致端口被占用。下面以mosquitto端口1883被占用为例,列出详细解决过程。 解决方法: 1.查找被占用的端口 netstat -tln  netstat -tln | grep ...
  • 文章目录守护进程daemon日志系统...比如的网络服务程序,可以在完成创建套接口,绑定套接口,设置套接口为监听模式后,变成守护进程进入后台执行而不占用控制终端,这是网络服务程序的常用模式。UNIX下的网络服务程序
  • 最近 杨海象 负责开发的某平台上线,效果不错,但是在使用期间出现了核心转储,占用了大量磁盘空间,如下图,可见,近1T。 比赛当天杨海象和老王尝试关闭核心转储,执行了命令 ulimit -c 0 核心仍然继续生成。虽然...
  • 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers ...前言Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) * id
  • Linux 进程

    千次阅读 2016-08-24 17:36:45
    参考:《Shell编程从入门到精通》 1. 进程是什么   定义: 进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。...对于Linux系统来说,新进程
  • Linux进程模型

    千次阅读 2015-01-31 09:52:25
    -------------原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/01/2617884.html-----------------------------------Linux进程通过一个task_struct结构体描述,在linux/sched.h中定义,通过理解该结构...
  • linux进程

    千次阅读 2017-03-29 17:22:52
    Linux下的多进程编程初步Linux下的多进程编程初步 引言 多进程编程 1 Linux进程的结构 2 Linux下的进程控制 21 僵尸进程 22 fork 23 exec 函数族 3 Linux下的进程间通信 31 管道 无名管道 有名管道 32 消息队列 33...
  • linux的 0号进程 和 1 号进程

    万次阅读 2017-12-03 14:12:05
    日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 ...Linux-4.5 ...LinuxDeviceDrivers ...Linux进程管理与调度-之-进程的创建 ...Linux下有3个特殊的进程,idle进程(PID = 0), init进
  • linux 查看端口使用,内存占用

    千次阅读 2019-02-25 14:09:02
    1.lsof使用, lsof -i:port 查看某个端口是否被占用 lsof -i 8080 2.使用 netstat netstat -anp|grep 9001 2.1netstat命令解释 netstat -ntlp //查看当前所有tcp端口· netstat -ntulp |grep 80 //...
  • linux usb接口的音频设备

    万次阅读 2013-11-06 18:43:05
    Linux中,先后出现了音频设备的两种框架OSS和ALSA,本节将在介绍数字音频设备及音频设备硬件接口的基础上,展现OSS和ALSA驱动的结构。 17.1~17.2节讲解了音频设备及PCM、IIS和AC97硬件接口。 17.3节阐述了Linux ...
  • 我们知道,Linux环境下,任何事物,都是以文件的形式存在,系统在后台,为每个应用程序,分配了一个文件描述符,他为应用程序和操作系统之间的交互操作提供了通用的接口,既然是文件,就会占用空间,此时可以使用...
  • http://hi.baidu.com/sysos/blog/item/d2e732fae4c8561ea9d31172.html安装完系统... 下面现介绍一下运行次序和运行级别:一个 Linux 系统的引导过程可以分为几个阶段。我们主要看看当内核加载后的那一个阶段. 你可以
  • Unix/Linux中的守护进程(Daemon)类似于Windows中的后台服务进程,一直在后台长时间运行的进程。它通常在系统启动后就运行,没有控制终端,也无法和前台的用户交互,在系统关闭时才结束。Daemon程序一般都作为服务...
  • linux进程管理

    万次阅读 2016-01-14 11:47:07
    Linux 计算需求的表现是以进程的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务)。因此,对进程及其调度进行一般管理就显得极为重要。  在用户空间,进程是由进程...
  • linux进程调度

    千次阅读 2014-11-03 09:12:27
    一. 何为进程调度  在linux这样的多用户多任务操作系统上,...同时调度过程又需要对各个进程不可见,在每个进程看来,自己是独占CPU在运行的。这就是虚拟CPU的概念。 调度程序是像linux这样的多任务操作系统的基础
  • Linux进程调度器概述--Linux进程的管理与调度(十五)

    万次阅读 多人点赞 2016-06-17 14:50:16
    日期 ... Linux进程管理与调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为
  • — -p pid:绑定到一个由pid对应的正在运行的进程,此参数常用来调试后台进程。 应用实例如下。 (1)跟踪vim及其子进程的运行,将输出信息写到文件vim.strace # strace -f -o vim.strace vim (2)strace...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,362
精华内容 23,744
关键字:

linux关闭占用接口的进程

linux 订阅