关于打印过程中强制移除打印机的处理
在打印过程中,强制拔除打印机会出现如下状况:
Hpijs会输出这个信息:unable to send DeviceStatus: Bad file descriptor: hplip_api.c 641
一直循环。
查得
$ man errno | grep "Bad file descriptor"
EBADF Bad file descriptor (POSIX.1)
解决方案1:
目前改善的是获取hpijs的pid,将其kill 9之后可以结束不停的打印。但是也会打印几百行后停止,所以优化的时候也要将hpijs中这句打印去掉。
static int print_stop_print(struct print_device_t* dev) {
int ret = EXIT_FAILURE;
// hpijs or ijsgutenprint pid.
pid_t pid = getPidByName("hpijs");
if(pid != 0)
if(kill(pid, 9) == 0)
ret = EXIT_SUCCESS;
return ret;
}
解决方案2:(最终采用的方案)
当出现这种情况的时候将自己kill掉。输出一次信息,然后将自己kill掉。
if(errno == EBADF)
exit(-1); // kill(getpid(), 9);
1.exit(-1);测试结果:
GPL Ghostscript 9.04 (2011-08-05) Copyright (C) 2011 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Processing pages 1 through 1. Page 1 unable to write to output, fd=6, count=4096: Input/output error unable to write to output, fd=6, count=4096: No such device unable to write to output, fd=6, count=4096: No such device unable to write to output, fd=6, count=4096: No such device unable to write to output, fd=6, count=4096: No such device unable to send DeviceStatus: Bad file descriptor: hplip_api.c 642 Error: /ioerror in --showpage-- Operand stack: 1 true Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1910 1 3 %oparray_pop 1909 1 3 %oparray_pop 1893 1 3 %oparray_pop --nostringval-- --nostringval-- 2 1 1 --nostringval-- %for_pos_int_continue --nostringval-- --nostringval-- 1793 0 9 %oparray_pop --nostringval-- --nostringval-- Dictionary stack: --dict:1161/1684(ro)(G)-- --dict:1/20(G)-- --dict:82/200(L)-- --dict:82/200(L)-- --dict:108/127(ro)(G)-- --dict:291/300(ro)(G)-- --dict:23/30(L)-- --dict:6/8(L)-- --dict:22/40(L)-- Current allocation mode is local Last OS error: 32 GPL Ghostscript 9.04: Unrecoverable error, exit code 1 |
测试成功,在输出一行 unable to send DeviceStatus: Bad file descriptor: hplip_api.c 642后,直接hpijs毙命。
2.kill(getpid(), 9)的测试结果:
测试为无效。
sed命令:
1).添加#include <errno.h>
sed -i '38s/#include "hplip_api.h"/#include <errno.h>\n#include "hplip_api.h"/' hplip_api.c
2.)添加
if(errno == EBADF)
exit(EXIT_FAILURE);
sed -i '643s/goto mordor;/if(errno == EBADF)\n exit(-1);\n goto mordor;\n/' hplip_api.c
扩展:
hpijs是一个服务,可以在像vold或者其它一样启动和停止。这样就更符合Android精神。
关于打印过程中强制移除打印机的处理相关推荐
- 在react框架中实现打印过程中踩的坑
最近在做一个需求,就是需要在产品里调用打印机,实现打印票据的操作,我也是第一次做,说真的踩坑不少,希望这篇文章可以帮助到你. 文章目录 前言 window.print()踩的坑 第三方库react-t ...
- LQ-630K/LQ-635K 打印过程中出现卡纸故障的分析与处理
一.现象描述: LQ-630K/LQ635K 打印机在打印连续纸出纸时,纸张堆积在打印机内部造成卡纸的问题,如图(1)(2). 图(1)打印机前部:出纸时纸张堆积在打印机内部 图(2)打印机后部:纸张 ...
- 简述计算机在液体成型中的应用,计算机技术在3D打印材料成型过程中的应用
计算机技术在3D打印材料成型过程中的应用 2019-03-18 07:36:22次浏览 魏嘉良 摘 要 3D打印作为近些年发展起来的集计算机技术.机械制造.材料成型等相关技术于一体的交叉领域.文章结合 ...
- pla3d打印材料密度_3D打印金属材料模型过程中常见问题
在金属3D打印过程中,可能会出现大量设备操作者试图避免的问题,包括孔隙.残余应力.致密度.翘曲.裂纹及表面光洁度等.下面我们来谈谈这几种常出现的问题. 1.表面光洁度 在金属3D打印件被使用或放置在展 ...
- 服务器2012还原系统,Windows Server 2012升级R2过程中意外关闭恢复原系统方法
2012升级R2过程中强制关闭了计算机,导致再次启动后蓝屏提示"BAD_SYSTEM_CONFIG_INFO".用2012安装盘进入尝试修复失败(安全模式什么的都不用想),进入命令 ...
- 中琅条码标签打印软件中打印设置中的相关问题
在日常使用中琅条码标签打印软件时,部分用户经常在打印数量上出错犯糊涂,不知道中琅软件中的标签数量和标签份数两者具体有什么区别,导致在打印过程中出现一系列错误.今天就来详细介绍一下中琅条码标签打印软件的 ...
- JAVA产生异常并打印,Java中异常打印输出的常见方法整理
前言 Java异常是在Java应用中的警报器,在出现异常的情况下,可以帮助我们程序猿们快速定位问题的类型以及位置.但是一般在我们的项目中,由于经验阅历等多方面的原因,依然有若干的童鞋在代码中没有正确的 ...
- r语言 rgl 强制过程中_一个R语言中操纵矢量空间数据的标准化工具—sf
注: 本文是R语言sf包的核心开发者和维护者--来自德国明斯特大学的地理信息学教授:Edzer Pebesma 的一篇关于sf包的简介,发表于2018年7月的R语言期刊,主要讲述了sf的定位.功能. ...
- 调用打印机_涨知识|你不知道的关于打印机的打印过程和打印机驱动的那些事...
以前一直以为打印很简单,不就是编辑好文件按个"打印"就行了?但其实打印过程可以复杂到你分分钟"怀疑人生".你以为的打印过程可能是这样的 ↓. 我们看到的打印过程 ...
最新文章
- Vue学习之路---No.7(分享心得,欢迎批评指正)
- 读取Excel的文本框,除了解析xml还可以用python调用VBA
- OGG-00446 ERROR: Could not find archived log
- SAP CRM呼叫中心activity board的填充逻辑调试
- Sum of AP series——AP系列之和
- 【项目经验】自动回声消除(AEC)原理
- 不用软件直接查询QQ好友的IP地址(二) 通过 Ping 得知对方是否联网在线(与QQ是否上线无关)
- UGUI制作Tab标签页
- 企业内网通讯软件有哪些优势?
- Flurry、友盟、TalkingData,Google analytic移动应用统计分析对比
- 电源线噪声:共模干扰、差模干扰
- PowerBI实用技巧:案例五(巧用Switch函数展现指标RGB颜色)
- 网状神经系统的典型特点,网状结构神经系统
- python标准数据类型叮叮叮
- 淘宝教育视频加速观看(在淘宝教育上看学习视频,需要加速,在谷歌浏览器上安装视频加速插件)
- 如何判断选择专业数字功放芯片
- Oracle知识点总结(三)
- PCA参数,属性,接口列表
- iOS 视频播放之MPMoviePlayerController
- php 支付宝用户信息授权,h5端支付宝第三方用户信息接口demo
热门文章
- ios沙箱软件_iOS沙盒管理工具FHHSandBoxViewer
- 学习笔记-写论文修改语法、同义词替换、找专业名词的一些网站
- Android设备管理器漏洞2--阻止用户取消激活设备管理器
- 非接触式IC卡存储结构
- 使用pyxlsb库读取xlsb格式excel文件,转为DataFrame(详细)
- 三十二、(重点)正则表达式1:re模块(re.match、group())、正则表达式单字符匹配、正则数量({m}、{m,n})
- 在linux中设置nexus开机自启动
- 82597-82-8,cyclo-(L)-Trp-(L)-Phe,cyclo(Phe-Trp)
- 做甲方的正确 “姿势”
- 2018年ACM-ICPC亚洲青岛区域竞赛 - M:Function and Function