精华内容
下载资源
问答
  • HOOK获取控制台输出

    2012-02-20 14:39:46
    用HOOK获取控制台输出 基于LINUX下的技术 WINDOWS的可以拿来看看 自己修改成可使用的代码
  • linux获取后台进程的控制台数据

    千次阅读 2016-01-08 12:18:16
    linux提供了一个daemon函数,使得进程可以脱离控制台运行,实现了后台运行的效果。但是进程后台运行后,原本在终端控制台输出的数据就看不到了。那么,怎样才能找回这些数据?文章主题就围绕着如何获得后台进程的...
    linux提供了一个daemon函数,使得进程可以脱离控制台运行,实现了后台运行的效果。但是进程后台运行后,原本在终端控制台输出的数据就看不到了。那么,怎样才能找回这些数据?

    这里,文章主题就围绕着 如何获得后台进程的控制台数据,其中的原理要从daemon说起。

    daemon主要做两件事:
    1、创建子进程,退出当前进程,并且以子进程创建新会话。这样,就算父进程退出,子进程也不会被关闭

    2、将标准输入,标准输出,标准错误都重定向/dev/null


    daemon 实现大致如下:

    int daemonize(int nochdir, int noclose) 
    { 
    	int fd;
    
    	switch (fork()) {
    	case -1:
    		return (-1);
    	case 0:
    		break;
    	default:
    		_exit(EXIT_SUCCESS);
    	}
    
    	if (setsid() == -1)
    		return (-1);
    
    	if (nochdir == 0) {
    		if(chdir("/") != 0) {
    			perror("chdir");
    			return (-1);
    		}
    	}
    
    	if (noclose == 0 && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
    		if(dup2(fd, STDIN_FILENO) < 0) {
    			perror("dup2 stdin");
    			return (-1);
    		}
    		if(dup2(fd, STDOUT_FILENO) < 0) {
    			perror("dup2 stdout");
    			return (-1);
    		}
    		if(dup2(fd, STDERR_FILENO) < 0) {
    			perror("dup2 stderr");
    			return (-1);
    		}
    
    		if (fd > STDERR_FILENO) {
    			if(close(fd) < 0) {
    				perror("close");
    				return (-1);
    			}
    		}
    	}
    	return (0);
    }
    所以,想取回进程的控制台数据,只要将标准输出,标准错误重定向到指定文件,然后读取这个文件就好了。

    文章这里写了个例子,简单演示下(这里通过kill信号完成进程通信,有点粗暴)
    代码如下,保存为 daemon_example.c
    #include <signal.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <fcntl.h>
    
    static int fd = -1;
    
    void sigroutine(int dunno) {
    	switch (dunno) {
    	case SIGUSR1:
    		fprintf(stderr, "Get a signal -- SIGUSR1 \n");
    		if (fd != -1) close(fd);
    		fd = open("/tmp/console_temp.log", O_RDWR|O_APPEND|O_CREAT, 0600);
    		if (fd == -1) break;
    		dup2(fd, STDIN_FILENO);
    		dup2(fd, STDOUT_FILENO);
    		dup2(fd, STDERR_FILENO);
    		break;
    		
    	case SIGUSR2:
    		fprintf(stderr, "Get a signal -- SIGUSR2 \n");
    		if (fd != -1) close(fd);
    		fd = open("/dev/null", O_RDWR, 0);
    		if (fd == -1) break;
    		dup2(fd, STDIN_FILENO);
    		dup2(fd, STDOUT_FILENO);
    		dup2(fd, STDERR_FILENO);
    		break;
    	}
    	return;
    
    }
    
    int main() {
    	signal(SIGUSR1, sigroutine);
    	signal(SIGUSR2, sigroutine);
    
    	daemon(1,0);
    	for (;;){
    			fprintf(stderr,"test \n") ; // 不断打印test
    			sleep(1);
    	}
    	return 0;
    }
    
    然后,编译和执行这个程序:
    $ gcc -o daemon_example daemon_example.c
    $ chmod +x daemon_example
    $ ./daemon_example
    $ ps -ef| grep daemon_example
    root     11328     1  0 19:15 ?        00:00:00 ./daemon_example
    如上,进程后台运行了,拿到pid 11328

    接着,写个脚本测试这个程序, 保存为test.sh:
    #!/bin/bash
    
    pid=$1
    ps -p $pid>/dev/null
    if [ ! $? -eq 0 ] ; then
    	echo pid does not exist!
    	exit 1
    fi
    echo pid $pid
    trap "kill -usr2 $pid && exit 1" HUP INT QUIT TERM
    kill -usr1 $pid
    echo it works,please wait..
    sleep 1
    tail -f -n 0 /tmp/console_temp.log
    echo done!
    
    执行这个脚本,结果如下:
    $ ./test.sh 11328
    pid 11328
    it works,please wait..
    test 
    test
    然后,按ctrl+c 退出脚本,这时脚本会通知进程将标准输出和标准错误重定向到 /dev/null,继续后台运行。
    这样,这个脚本就成了后台进程的调试工具了,需要后台数据的时候执行一下,不需要就关闭。当然,这只是一个示例,实际应用中要做改善,比如kill信号改成pipe或socket通讯,缓存文件要限制大小,或自动清除等。

    文章最后,是不是有点取巧,你有什么更好的办法,欢迎评论交流!

    参考:
    [1]  linux获取daemon进程的控制台数据 没有开花的树
    展开全文
  • linux提供了一个daemon函数,使得进程能够脱离控制台执行,实现了后台执行的效果。可是进程后台执行后,原本在终端控制台输出的数据就看不到了。那么,如何才干找回这些数据?这里。文章主题就环绕着 如何获得后台...

    linux提供了一个daemon函数,使得进程能够脱离控制台执行,实现了后台执行的效果。可是进程后台执行后,原本在终端控制台输出的数据就看不到了。

    那么,如何才干找回这些数据?

    这里。文章主题就环绕着 如何获得后台进程的控制台数据,当中的原理要从daemon说起。

    daemon主要做两件事:

    1、创建子进程,退出当前进程,而且以子进程创建新会话。这样,就算父进程退出,子进程也不会被关闭

    2、将标准输入。标准输出,标准错误都重定向/dev/null

    daemon 实现大致例如以下:int daemonize(int nochdir, int noclose)

    {

    int fd;

    switch (fork()) {

    case -1:

    return (-1);

    case 0:

    break;

    default:

    _exit(EXIT_SUCCESS);

    }

    if (setsid() == -1)

    return (-1);

    if (nochdir == 0) {

    if(chdir("/") != 0) {

    perror("chdir");

    return (-1);

    }

    }

    if (noclose == 0 && (fd = open("/dev/null", O_RDWR, 0)) != -1) {

    if(dup2(fd, STDIN_FILENO) < 0) {

    perror("dup2 stdin");

    return (-1);

    }

    if(dup2(fd, STDOUT_FILENO) < 0) {

    perror("dup2 stdout");

    return (-1);

    }

    if(dup2(fd, STDERR_FILENO) < 0) {

    perror("dup2 stderr");

    return (-1);

    }

    if (fd > STDERR_FILENO) {

    if(close(fd) < 0) {

    perror("close");

    return (-1);

    }

    }

    }

    return (0);

    }

    所以,想取回进程的控制台数据,仅仅要将标准输出,标准错误重定向到指定文件,然后读取这个文件就好了。

    文章这里写了个样例,简单演示下(这里通过kill信号完毕进程通信,有点粗暴)

    代码例如以下,保存为 daemon_example.c

    #include

    #include

    #include

    #include

    static int fd = -1;

    void sigroutine(int dunno) {

    switch (dunno) {

    case SIGUSR1:

    fprintf(stderr, "Get a signal -- SIGUSR1 \n");

    if (fd != -1) close(fd);

    fd = open("/tmp/console_temp.log", O_RDWR|O_APPEND|O_CREAT, 0600);

    if (fd == -1) break;

    dup2(fd, STDIN_FILENO);

    dup2(fd, STDOUT_FILENO);

    dup2(fd, STDERR_FILENO);

    break;

    case SIGUSR2:

    fprintf(stderr, "Get a signal -- SIGUSR2 \n");

    if (fd != -1) close(fd);

    fd = open("/dev/null", O_RDWR, 0);

    if (fd == -1) break;

    dup2(fd, STDIN_FILENO);

    dup2(fd, STDOUT_FILENO);

    dup2(fd, STDERR_FILENO);

    break;

    }

    return;

    }

    int main() {

    signal(SIGUSR1, sigroutine);

    signal(SIGUSR2, sigroutine);

    daemon(1,0);

    for (;;){

    fprintf(stderr,"test \n") ; // 不断打印test

    sleep(1);

    }

    return 0;

    }

    然后,编译和执行这个程序:$ gcc -o daemon_example daemon_example.c

    $ chmod +x daemon_example

    $ ./daemon_example

    $ ps -ef| grep daemon_example

    root     11328     1  0 19:15 ?

    00:00:00 ./daemon_example

    如上,进程后台执行了。拿到pid 11328

    接着,写个脚本測试这个程序, 保存为test.sh:

    #!/bin/bash

    pid=$1

    ps -p $pid>/dev/null

    if [ ! $? -eq 0 ] ; then

    echo pid does not exist!

    exit 1

    fi

    echo pid $pid

    trap "kill -usr2 $pid && exit 1" HUP INT QUIT TERM

    kill -usr1 $pid

    echo it works,please wait..

    sleep 1

    tail -f -n 0 /tmp/console_temp.log

    echo done!

    执行这个脚本,结果例如以下:$ ./test.sh 11328

    pid 11328

    it works,please wait..

    test

    test

    然后,按ctrl+c 退出脚本,这时脚本会通知进程将标准输出和标准错误重定向到 /dev/null。继续后台执行。

    这样,这个脚本就成了后台进程的调试工具了,须要后台数据的时候执行一下,不须要就关闭。

    当然,这仅仅是一个演示样例。实际应用中要做改善。比方kill信号改成pipe或socket通讯,缓存文件要大小限制。或自己主动清除等。

    文章最后。是不是有点取巧。你有什么更好的办法,欢迎评论交流!

    參考:

    展开全文
  • linux获取daemon进程的控制台数据

    千次阅读 2016-01-08 13:59:42
    linux提供了一个daemon函数,使得进程可以脱离控制台运行,实现了后台运行的效果。但是进程后台运行后,原本在终端控制台输出的数据就看不到了。那么,怎样才能找回这些数据? 这里,文章主题就围绕着 如何...

    转载自:http://blog.csdn.net/mycwq/article/details/50479735

    linux提供了一个daemon函数,使得进程可以脱离控制台运行,实现了后台运行的效果。但是进程后台运行后,原本在终端控制台输出的数据就看不到了。那么,怎样才能找回这些数据?

    这里,文章主题就围绕着 如何获得后台进程的控制台数据,其中的原理要从daemon说起。

    daemon主要做两件事:
    1、创建子进程,退出当前进程,并且以子进程创建新会话。这样,就算父进程退出,子进程也不会被关闭

    2、将标准输入,标准输出,标准错误都重定向/dev/null


    daemon 实现大致如下:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. int daemonize(int nochdir, int noclose)   
    2. {   
    3.     int fd;  
    4.   
    5.     switch (fork()) {  
    6.     case -1:  
    7.         return (-1);  
    8.     case 0:  
    9.         break;  
    10.     default:  
    11.         _exit(EXIT_SUCCESS);  
    12.     }  
    13.   
    14.     if (setsid() == -1)  
    15.         return (-1);  
    16.   
    17.     if (nochdir == 0) {  
    18.         if(chdir("/") != 0) {  
    19.             perror("chdir");  
    20.             return (-1);  
    21.         }  
    22.     }  
    23.   
    24.     if (noclose == 0 && (fd = open("/dev/null", O_RDWR, 0)) != -1) {  
    25.         if(dup2(fd, STDIN_FILENO) < 0) {  
    26.             perror("dup2 stdin");  
    27.             return (-1);  
    28.         }  
    29.         if(dup2(fd, STDOUT_FILENO) < 0) {  
    30.             perror("dup2 stdout");  
    31.             return (-1);  
    32.         }  
    33.         if(dup2(fd, STDERR_FILENO) < 0) {  
    34.             perror("dup2 stderr");  
    35.             return (-1);  
    36.         }  
    37.   
    38.         if (fd > STDERR_FILENO) {  
    39.             if(close(fd) < 0) {  
    40.                 perror("close");  
    41.                 return (-1);  
    42.             }  
    43.         }  
    44.     }  
    45.     return (0);  
    46. }  
    所以,想取回进程的控制台数据,只要将标准输出,标准错误重定向到指定文件,然后读取这个文件就好了。

    文章这里写了个例子,简单演示下(这里通过kill信号完成进程通信,有点粗暴)
    代码如下,保存为 daemon_example.c
    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. #include <signal.h>  
    2. #include <unistd.h>  
    3. #include <stdio.h>  
    4. #include <fcntl.h>  
    5.   
    6. static int fd = -1;  
    7.   
    8. void sigroutine(int dunno) {  
    9.     switch (dunno) {  
    10.     case SIGUSR1:  
    11.         fprintf(stderr, "Get a signal -- SIGUSR1 \n");  
    12.         if (fd != -1) close(fd);  
    13.         fd = open("/tmp/console_temp.log", O_RDWR|O_APPEND|O_CREAT, 0600);  
    14.         if (fd == -1) break;  
    15.         dup2(fd, STDIN_FILENO);  
    16.         dup2(fd, STDOUT_FILENO);  
    17.         dup2(fd, STDERR_FILENO);  
    18.         break;  
    19.           
    20.     case SIGUSR2:  
    21.         fprintf(stderr, "Get a signal -- SIGUSR2 \n");  
    22.         if (fd != -1) close(fd);  
    23.         fd = open("/dev/null", O_RDWR, 0);  
    24.         if (fd == -1) break;  
    25.         dup2(fd, STDIN_FILENO);  
    26.         dup2(fd, STDOUT_FILENO);  
    27.         dup2(fd, STDERR_FILENO);  
    28.         break;  
    29.     }  
    30.     return;  
    31.   
    32. }  
    33.   
    34. int main() {  
    35.     signal(SIGUSR1, sigroutine);  
    36.     signal(SIGUSR2, sigroutine);  
    37.   
    38.     daemon(1,0);  
    39.     for (;;){  
    40.             fprintf(stderr,"test \n") ; // 不断打印test  
    41.             sleep(1);  
    42.     }  
    43.     return 0;  
    44. }  
    然后,编译和执行这个程序:
    $ gcc -o daemon_example daemon_example.c
    $ chmod +x daemon_example
    $ ./daemon_example
    $ ps -ef| grep daemon_example
    root     11328     1  0 19:15 ?        00:00:00 ./daemon_example
    如上,进程后台运行了,拿到pid 11328

    接着,写个脚本测试这个程序, 保存为test.sh:
    [plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. #!/bin/bash  
    2.   
    3. pid=$1  
    4. ps -p $pid>/dev/null  
    5. if [ ! $? -eq 0 ] ; then  
    6.     echo pid does not exist!  
    7.     exit 1  
    8. fi  
    9. echo pid $pid  
    10. trap "kill -usr2 $pid && exit 1" HUP INT QUIT TERM  
    11. kill -usr1 $pid  
    12. echo it works,please wait..  
    13. sleep 1  
    14. tail -f -n 0 /tmp/console_temp.log  
    15. echo done!  
    执行这个脚本,结果如下:
    $ ./test.sh 11328
    pid 11328
    it works,please wait..
    test 
    test
    然后,按ctrl+c 退出脚本,这时脚本会通知进程将标准输出和标准错误重定向到 /dev/null,继续后台运行。
    这样,这个脚本就成了后台进程的调试工具了,需要后台数据的时候执行一下,不需要就关闭。当然,这只是一个示例,实际应用中要做改善,比如kill信号改成pipe或socket通讯,缓存文件要限制大小,或自动清除等。

    文章最后,是不是有点取巧,你有什么更好的办法,欢迎评论交流!

    参考:
    [1]  linux获取daemon进程的控制台数据 没有开花的树

    展开全文
  • 一、编写方法getStackTrace 获取异常的堆栈信息拼接为字符串通过LOG日志打印到服务器Console, 并且获取异常的message ex.getMessage() public static String getStackTrace(StackTraceElement[] stackTraceElements)...
    一、编写方法getStackTrace 获取异常的堆栈信息拼接为字符串通过LOG日志打印到服务器Console, 并且获取异常的message ex.getMessage() 
    public static String getStackTrace(StackTraceElement[] stackTraceElements){
    StringBuilder strBuilder = new StringBuilder();
    for(StackTraceElement stackTrace : stackTraceElements) {
    String stackStr = stackTrace.getClassName() + ":" + stackTrace.getMethodName() + "("
    + stackTrace.getFileName() + ":" + stackTrace.getLineNumber() + ")";
    strBuilder.append("\t").append(stackStr).append("\n");
    }
    return strBuilder.toString();
    }

    catch (Exception ex) {
    LOG.info("堆栈异常"+ getStackTrace( ex.getStackTrace()));
    LOG.info("****捕获到异常了**** {}",ex.getMessage());
    ex.printStackTrace(); 在linux 服务器Console 上不会显示printStackTrace()的信息
    }
     

    转载于:https://www.cnblogs.com/JimCalark/p/6952782.html

    展开全文
  • C++获取控制台输出

    千次阅读 2015-06-29 14:06:54
    // Test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include using namespace std;#define EXECDOSCMD "ping www.baidu.com " //可以换成你的...
  • linux实时控制台输出日志文件内容

    千次阅读 2016-06-20 15:50:21
    tail -f message-server.log 技术交流群:
  • Linux控制台版本2048

    千次阅读 2014-10-19 09:55:11
    在Github上看到一个荷兰人写的linux控制台版的2048,用的C语言,感觉很有意思。 读了一下他的源码,感觉写的不错,就厚着脸皮加了一些中文注释,源码如下: /* ==================================================...
  • 一: 控制台打印SQL application.properties中添加如下即可在控制台打印sql logging.level.com.fx.fxxt.mapper=debug 二:日志 因为Spring Boot使用的默认日志框架就是Logback,所以只需要修改Mapper的级别为...
  • 【java实现控制台打印表格】

    千次阅读 2020-11-12 17:20:30
    我的实现思路:使用jdbc连接目标服务器,并执行一条给定的sql语句,能够连接成功则在控制台输出执行结果,连接失败则打印异常信息。 在实现该功能的过程中,对我来说最麻烦的是要在控制台输出表格,难点在于表格列宽...
  • 本地cmd命令, 输入命令, 并在控制台输出命令执行结果 jsch 远程ssh到linux服务器, 执行结果并显示输出
  • Linux控制台重定向方法 本文介绍一种通过文件描述符重定向终端输入/输出的方法。 一、背景 一些嵌入式设备,一般都会留有调试串口,经由RS232/485标准与PC的COM口相连,将打印输出在PC上显示,并可以接收PC端的...
  • 因为大创要做一个人脸测温的项目部署到树莓派上,所以界面是必须的,pyqt5比较幸运的之前我也接触过,由于需要将控制台输出的结果转移到界面上便于调试和观察,实现的具体效果为: 实现的具体效果大概就是这个样子...
  • 在使用 NodeJs 采集其他网站网页时遇到的,在获取源代码后发现里面原来的中文被转成了 Unicode(UTF8) 编码的中文(如:&# [xxx]),这当然不是真正想要的中文实体 解决方案: 使用 html-entities 对字符进行...
  • 我通过linux命令已经进入logs目录,然后在控制台输入下面命令tail -f info.log 然后就可以在控制台实时查看日志里面的信息了。 这种效果跟咱们用myeclipse的控制台效果是一样的,可以用于调试!
  • 在MyEclipse中开发tomcat版web程序,程序中通过网络请求,从远程服务器获取了一段字符串,显示为乱码(含中文)。初步分析是因为远程服务器发送过来的字符流是传输内容的UTF-8编码,而客户端获得字符流后,以JVM默认...
  • 经过踩坑无数,发现QProcess是最好的是实现方式。本方法windows/linux/mac 通用 qt 调用python 或是qt调用其他程序,并获取字符输出数据
  • linux 打印服务器 内容精选换一换当云服务器密码即将过期、密码泄露或首次登录时(首次登录云服务器建议您修改初始密码),您可以参考本节操作在操作系统内部修改云服务器密码。优先推荐您参考在控制台重置云服务器...
  • vi /etc/sysconfig/i18n 原 LANG="zh_CN.UTF-8"将内容改为 LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" SUPPORTED="zh_... ...
  • Linux Shell read读取控制台输入

    千次阅读 2019-05-08 21:02:06
    基本语法 read(选项)(参数) 选项: -p 后面跟提示信息,即在输入前打印提示信息。 -t:后面跟秒数,定义输入字符的等待时间,如果没有在指定的时间内输入就不再等待 ...
  • 我们来简单分析一下控制台输出和串口输出: 1.printk/pr_info/printf:能在串口输出或者是dmesg输出, 但是打印等级必须比系统输出等级优先级高 pr_info(" pwq %d:", pool->id); 默认demsg的输出等级为7 系统...
  • linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解 linux 菜鸟 首先: 1。终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 一台主机,连很多终端,终端为主机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,310
精华内容 10,124
关键字:

linux获取控制台打印

linux 订阅