1

raspberry-pi OS イメージを microSD カードにコピーする進行状況を監視しようとしています。これは、Kill a process called using open3 in ruby​​ に似ていますが、プロセスを強制終了しているのではなく、進行状況メッセージを発行するコマンドをプロセスに送信しています。

  
    rpath = device_path.gsub(/disk/, "rdisk")
    puts "\n\nCopying image to #{rpath}"

    if false
      stdout_err, status = Open3.capture2e( "sudo", "dd", "bs=1m", "if=#{source_path}", "of=#{rpath}" )
      puts stdout_err
    else
      cmd = "sudo dd bs=1m if=#{source_path} of=#{rpath}"
      Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
        Thread.new do
          stdout_err.each {|l| puts l}
        end

        Thread.new do
          while true
            sleep 5
            if true
              Process.kill("INFO", wait_thr.pid)      #Tried INFO, SIGINFO, USR1, SIGUSR1
                                                      # all give:  `kill': Operation not permitted (Errno::EPERM)
            else
              stdin.puts  20.chr      #Should send ^T -- has no effect, nothing to terminal during flash
            end
          end
        end

        wait_thr.value
      end

最初のセクション ('if false' の後) は、Open3.capture2eを使用して画像をフラッシュします。これは機能しますが、もちろん進捗情報は発行されません。

「else」の後のセクションは、Open3.popen2eを使用して画像をフラッシュします。また、'Process.kill("INFO", wait_thr.pid)' を発行するか、5 秒ごとに ^T (20.chr) を stdin ストリームに送信して、進行状況を表示しようとします。

Process.kill行は、「操作は許可されていません」というエラーを生成しますstdin.puts行はまったく効果がありません

もう 1 つ... popen2e プロセスが点滅している間に、キーボードで ctrl-T を押すと、進行状況の応答が生成されます。プログラムでそれを行うことはできません。

どんな助けでも大歓迎です!

4

1 に答える 1