[問題] adb process 莫名咬住 created file

作者: doom8199 (~口卡口卡 修~)   2015-02-20 01:46:05
不確定這個問題該 po 到 Android 還是 Perl 版
最近用 Perl 寫有關 adb debugging 遇到一個詭異的問題
就是執行 perl 途中, adb process 會咬住 file created from perl
後來把問題 narrow down 成以下 script:
=================================
use strict;
my $test = "out.log";
system("adb kill-server"); # (1)
open FILE, "> $test"; # (2)
system("adb shell ls"); # (3)
close FILE;
unlink $test or die "Q_Q\n";
=================================
只要執行該 script, console 一定會顯示 Q_Q
(當然前提是 找的到 adb 程式 和 usb driver)
但若只要在 open file 前, 讓 adb daemon 可以起來
例如在 #(1) 和 #(2) 之間呼叫 adb remount:
=================================
system("adb kill-server"); # (1)
system("adb remount"); # (4)
open FILE, "> $test"; # (2)
=================================
這樣的 script 就不會印出 Q_Q 了
不知道是不是因為 adb 起來的時候動到 file descriptor
讓檔案以為是 adb.exe 叫起來
但相同的邏輯,用 Python 跑卻沒事情
麻煩版上的大神們能幫忙指點迷津
感謝~
作者: flu (Crazy Rhythm)   2015-02-21 03:09:00
有點小叉題但想請教一下 在幾種呼叫其他程式的方法中也就是 system(), exec(), qr//, IPC:: 之類等等,原po是比較過python和perl的ipc, fork, 有無shell中介..等等機制後 採用了python中和perl的system()的對等指令後才說是「相同的邏輯,用 Python 跑卻沒事情」這樣的敘述是嗎回到原題,試試 system LIST 或 exec跑看看囉另外return value,$OS_ERROR(with use ENGLISH)的也都看看會比較好吧*第二列推文的 qr// 要改成 qx//黃色的那一列是想表達 system('adb shell ls') 執行後會停在那一列,不會進行到下一列是嗎?對了 我想你17~27列的程式會那樣是因為檔案$test不在,所以Q_Q如果你對 adb shell的回傳值有疑惑的話 http://x.co/7o1Rt但是那文章描述的問題我認知上似乎與你的只是類似 但不同另外我猜你的OS是win系列 這樣就與un*x的fork有大大的不同只是順道一提 和要解決你的case應該沒有很大的關聯吧...
作者: doom8199 (~口卡口卡 修~)   2015-02-22 18:44:00
不是檔案不存在, 是 "$test file 真的被 adb.exe 使用"才造成砍檔失敗。想要砍檔成功,只能先 kill-server另外我目前遇到的問題的確是在 win series晚一點會在 linux 上用 emulator 試看看有沒有同樣問題

Links booklink

Contact Us: admin [ a t ] ucptt.com