以上就是给各位分享Android检测和监听当前USB设备VID/PID,其中也会对android监听usb拔插进行解释,同时本文还将给你拓展/proc/[pid]/pagemaps和/proc/[pi
以上就是给各位分享Android 检测和监听当前 USB 设备 VID/PID,其中也会对android 监听usb拔插进行解释,同时本文还将给你拓展/ proc / [pid] / pagemaps和/ proc / [pid] / maps | linux、/var/run/yum.pid 已被锁定,PID 为 xxx 的另一个程序正在运行、/var/run/yum.pid 已被锁定,PID 为 XXXXX 的另一个程序正在运行、Airflow SSH 在警告后收到 SIGTERM:Recorded pid 1098 与当前的 pid 31631 不匹配等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Android 检测和监听当前 USB 设备 VID/PID(android 监听usb拔插)
- / proc / [pid] / pagemaps和/ proc / [pid] / maps | linux
- /var/run/yum.pid 已被锁定,PID 为 xxx 的另一个程序正在运行
- /var/run/yum.pid 已被锁定,PID 为 XXXXX 的另一个程序正在运行
- Airflow SSH 在警告后收到 SIGTERM:Recorded pid 1098 与当前的 pid 31631 不匹配
Android 检测和监听当前 USB 设备 VID/PID(android 监听usb拔插)
在 APP 中使用:
检测当前连接设备是否有对应的 VID/PID
private boolean isCurrentDeviceConnected(){
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> usbList = manager.getDeviceList();
for(String key: usbList.keySet()){
UsbDevice usbDevice = usbList.get(key);
if(usbDevice != null && usbDevice.getProductId() == 10304 && usbDevice.getVendorId() == 1060){
return true;
}
}
return false;
}
监听 USB 设备插入和拔出
IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
registerReceiver(mUsbStateChangeReceiver, filter);
private final BroadcastReceiver mUsbStateChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
UsbDevice usbDevice = (UsbDevice)intent.getExtras().get("device");
if(usbDevice != null && usbDevice.getProductId() == 10304 && usbDevice.getVendorId() == 1060){
if(action == UsbManager.ACTION_USB_DEVICE_ATTACHED){
}else if(action == UsbManager.ACTION_USB_DEVICE_DETACHED){
}
}
}
};
在 frameworks 中使用:
需要修改 frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
1. 在原来的 ACTION_USB_DEVICE_ATTACHED receiver 中添加自己需要检测的 VID PID 的代码
BroadcastReceiver hostReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Iterator devices = ((UsbManager) context.getSystemService(Context.USB_SERVICE))
.getDeviceList().entrySet().iterator();
if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
mHandler.sendMessage(MSG_UPDATE_HOST_STATE, devices, true);
if(need) {
UsbDevice usbDevice = (UsbDevice)intent.getExtras().get("device");
if(usbDevice != null && usbDevice.getProductId() == CRADLE_MONITOR_PID
&& usbDevice.getVendorId() == CRADLE_MONITOR_VID) {
handleCradleConnected(true);
}
}
} else {
mHandler.sendMessage(MSG_UPDATE_HOST_STATE, devices, false);
if(need) {
UsbDevice usbDevice = (UsbDevice)intent.getExtras().get("device");
if(usbDevice != null && usbDevice.getProductId() == CRADLE_MONITOR_PID
&& usbDevice.getVendorId() == CRADLE_MONITOR_VID) {
handleCradleConnected(false);
}
}
}
}
};
2. 添加直接检测当前是否已经连接的 code
private boolean isCradleConnected(){
UsbManager manager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> usbList = manager.getDeviceList();
for(String key: usbList.keySet()){
UsbDevice usbDevice = usbList.get(key);
if(usbDevice != null && usbDevice.getProductId() == CRADLE_MONITOR_PID
&& usbDevice.getVendorId() == CRADLE_MONITOR_VID){
return true;
}
}
return false;
}
3. 在 MSG_BOOT_COMPLETED 开机完成的 message 再去呼叫步骤 2 里面的 function 去做初始化检测
注意:不能在 UsbDeviceManager 的构造函数里面去呼叫步骤 2 的 function,此时系统初始化未完成,会造成无法开机!
/ proc / [pid] / pagemaps和/ proc / [pid] / maps | linux
我正在努力弄清标题中提到的两个文件。我查了一下是什么。但是,我无法理解如何从他们那里提取有用的信息(或者我只是以错误的方式来对待)。
让我解释一下:页面映射是一个相当新的“功能”伪文件,其中包含分配给当前[pid]的虚拟页面的物理框架信息。也就是说,给定一个从地址x开始的虚拟页面,比如说“
vas”代表虚拟地址开始,我可以使用vas为页面地图文件建立索引,以获取映射的物理页面框架的64位。这些位包含有关该虚拟页面的信息。但是,当我提取位并进行一些移位时,我会迷失于所见。
这些位表示如下:0-54是页面帧号,55-60是页面移位,63rd位是当前位,还有其他一些我不太感兴趣的位。在使用/ proc / [pid] /
maps中的vas地址进行了一些映射之后,似乎几乎每个进程的页面都被交换了,即,第63位始终为零。:(
我想问题是,我应该如何有效地使用页面映射来获取/ proc / [pid] / maps给定地址的等效物理地址
公平地说,我已经发布了一个类似的问题,但是前几天的方法有所不同。
如果有人能对此事有所启发,我将不胜感激。
===编辑===
要解决以下评论:我正在从/ proc / [pid] / maps中读取一行,这些行如下所示:
00400000-00401000 r-xp 00000000 08:01 8915461 / home / janjust / my_programs
/ shared_mem 7ffffef1b000-7ffffef3c000 rw-p 00000000 00:00 0 [堆栈]
然后,我提取它接触的虚拟页面的数量并为二进制文件/ proc / [pid] /
pagemaps编制索引,对于每个虚拟页面,我都可以提取分配给它的物理页面。
输出如下:
00400000-00401000 r-xp 00000000 08:01 8915461 / home / janjust / my_programs
/ shared_mem num_pages:1:86000000001464C6
虚拟范围内每个虚拟页面的一个物理地址。
用于读取行并提取物理地址的代码是:
74 /* process /proc/pid/maps, by line*/75 while(fgets(line, 256, in_map) != NULL){76 unsigned long vas;77 unsigned long vae;78 int num_pages;79 80 //print line81 printf("%s", line);82 83 /*scan for the virtual addresses*/84 n = sscanf(line, "%lX-%lX", &vas, &vae);85 if(n != 2){86 printf("Involid line read from %s\n",maps);87 continue;88 }89 90 num_pages = (vae - vas) / PAGE_SIZE;91 printf("num_pages: %d\n", num_pages);92 93 if(num_pages > 0){94 long index = (vas / PAGE_SIZE) * sizeof(unsigned long long);95 off64_t o;96 ssize_t t;97 98 /* seek to index in pagemaps */99 o = lseek64(pm, index, SEEK_SET);100 if (o != index){101 printf("Error seeking to o:%ld, index:%ld.\n", o, index);102 }103 104 /* map the virtual to physical page */105 while(num_pages > 0){106 unsigned long long pa;107 108 /* Read a 64-bit word from each pagemap file... */109 t = read(pm, &pa, sizeof(unsigned long long));110 if(t < 0){111 printf("Error reading file \"%s\" \n", page_map);112 goto next_line;113 }114 printf(": %016llX\n", pa);
但是,尽管我认为我得到了正确的输出,但是索引似乎是类型不匹配或正在发生其他事情:例如,输出表示地图中的[shared
mem]行给出了错误的索引;但是我仍然能够浏览二进制文件并获取物理页面地址。
该输出的示例如下:
969 7f7f08d58000-7f7f08d59000 rw-s 00000000 00:04 0 /SYSV00003039 (deleted)970 num_pages: 1971 Error seeking to o:-1081840960, index:273796065984.972 : 8600000000148267
好的,现在,最后我应该说这是在64位操作系统下,并且此问题在32位操作系统中不会持续存在。
答案1
小编典典噢,K,索引是正确的,但是将off64_t
o(8bytes)与长索引进行比较会解释o错误,因此为什么我会收到该错误。哈!这是一个愚蠢的错误。因此,添加适当的标头就可以了。
缺少标题:-/ 叹气 解决了将off64_t与无符号long比较的问题。
/var/run/yum.pid 已被锁定,PID 为 xxx 的另一个程序正在运行
问题:已加载插件: fastestmirror,security
/var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行
解决方法:删除 yum.pid 文件( rm -rf /var/run/yum.pid),再次运行 yum 命令
/var/run/yum.pid 已被锁定,PID 为 XXXXX 的另一个程序正在运行
删除jdk时终端提示
/var/run/yum.pid已被锁定,PID 为 XXXXX 的另一个程序正在运行
解决方法:
直接在终端运行 rm -f/var/run/yum.pid 将该文件删除,然后再次运行yum
问题再现:
[root@localhostzjy]# yum -y remove java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
已加载插件:langpacks,product-id,search-disabled-repos,subscription-manager
This system is notregistered to Red Hat Subscription Management. You can use subscription-managerto register.
/var/run/yum.pid 已被锁定,PID 为 36637 的另一个程序正在运行。
Another app iscurrently holding the yum lock; waiting for it to exit...
另一个应用程序是:yum
内存: 80 M RSS (441 MB VSZ)
已启动: Sun Jan 7 19:29:40 2018 -02:55之前
状态 :跟踪/停止,进程ID:36637
Another app iscurrently holding the yum lock; waiting for it to exit...
另一个应用程序是:yum
内存: 80 M RSS (441 MB VSZ)
已启动: Sun Jan 7 19:29:40 2018 -02:57之前
状态 :跟踪/停止,进程ID:36637
Another app iscurrently holding the yum lock; waiting for it to exit...
另一个应用程序是:yum
内存: 80 M RSS (441 MB VSZ)
已启动: Sun Jan 7 19:29:40 2018 -02:59之前
状态 :跟踪/停止,进程ID:36637
Another app iscurrently holding the yum lock; waiting for it to exit...
另一个应用程序是:yum
内存: 80 M RSS (441 MB VSZ)
已启动: Sun Jan 7 19:29:40 2018 -03:01之前
状态 :跟踪/停止,进程ID:36637
Another app iscurrently holding the yum lock; waiting for it to exit...
另一个应用程序是:yum
内存: 80 M RSS (441 MB VSZ)
已启动: Sun Jan 7 19:29:40 2018 -03:03之前
状态 :跟踪/停止,进程ID:36637
^Z
解决后:
成功!
Airflow SSH 在警告后收到 SIGTERM:Recorded pid 1098 与当前的 pid 31631 不匹配
如何解决Airflow SSH 在警告后收到 SIGTERM:Recorded pid 1098 与当前的 pid 31631 不匹配
我需要一些帮助。
在 docker 容器+LocalExecutor 上运行气流。
Airflow 版本为 2.0.0 (https://pypi.org/project/apache-airflow/2.0.0/)
我正在使用 SSHOperator 的包装器运行一个长时间运行的任务。 基本上,我打开一个 SSH 会话以在 spark 边缘节点中运行 spark-submit 作业。 (YARN JOB 成功但气流任务失败)
任务以 PID 31675 开始:
[2021-06-24 18:29:09,664] {standard_task_runner.py:51} INFO - Started process 31675 to run task
然后在一段时间后收到此警告:
记录的pid 1098与当前pid 31631不匹配
然后任务失败:
[2021-06-24 19:45:44,493] {local_task_job.py:166} WARNING - Recorded pid 1098 does not match the current pid 31631
[2021-06-24 19:45:44,496] {process_utils.py:95} INFO - Sending Signals.SIGTERM to GPID 31675
[2021-06-24 19:45:44,496] {taskinstance.py:1214} ERROR - Received SIGTERM. Terminating subprocesses.
[2021-06-24 19:45:44,528] {taskinstance.py:1396} ERROR - LatamSSH operator error: Task received SIGTERM signal
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/latamairflow/operators/latam_ssh_operator.py",line 453,in execute
readq,_,_ = select([channel],[],self.timeout)
File "/usr/local/lib/python3.6/site-packages/airflow/models/taskinstance.py",line 1216,in signal_handler
raise AirflowException("Task received SIGTERM signal")
airflow.exceptions.AirflowException: Task received SIGTERM signal
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/airflow/models/taskinstance.py",line 1086,in _run_raw_task
self._prepare_and_execute_task_with_callbacks(context,task)
File "/usr/local/lib/python3.6/site-packages/airflow/models/taskinstance.py",line 1260,in _prepare_and_execute_task_with_callbacks
result = self._execute_task(context,task_copy)
File "/usr/local/lib/python3.6/site-packages/airflow/models/taskinstance.py",line 1300,in _execute_task
result = task_copy.execute(context=context)
File "/usr/local/lib/python3.6/site-packages/latamairflow/operators/latam_ssh_operator.py",line 502,in execute
raise AirflowException("LatamSSH operator error: {0}".format(str(e)))
airflow.exceptions.AirflowException: LatamSSH operator error: Task received SIGTERM signal
[2021-06-24 19:45:44,529] {taskinstance.py:1440} INFO - Marking task as Failed.
我们今天的关于Android 检测和监听当前 USB 设备 VID/PID和android 监听usb拔插的分享已经告一段落,感谢您的关注,如果您想了解更多关于/ proc / [pid] / pagemaps和/ proc / [pid] / maps | linux、/var/run/yum.pid 已被锁定,PID 为 xxx 的另一个程序正在运行、/var/run/yum.pid 已被锁定,PID 为 XXXXX 的另一个程序正在运行、Airflow SSH 在警告后收到 SIGTERM:Recorded pid 1098 与当前的 pid 31631 不匹配的相关信息,请在本站查询。
本文标签: