title: tracking status/progress in gnu parallel
body: <p>I've implemented parallel in one of our major scripts to perform data migrations between servers. Presently, the output is presented all at once (-u) in pretty colors, with periodic echos of status from the function being executed depending on which sequence is being run (e.g. <code>5/20: $username: rsyncing homedir</code> or <code>5/20: $username: restoring account</code>). These are all echoed directly to the terminal running the script, and accumulate there. Depending on the length of time a command is running, however, output can end up well out of order, and long running <code>rsync</code> commands can be lost in the shuffle. Butm I don't want to wait for long running processes to finish in order to get the output of following processes.</p>
  
  <p>In short, my issue is keeping track of which arguments are being processed and are still running.</p>
  
  <p>What I would like to do is send parallel into the background with <code>(parallel args command {#} {} ::: $userlist) &amp;</code> and then track progress of each of the running functions. My initial thought was to use <code>ps</code> and <code>grep</code> liberally along with <code>tput</code> to rewrite the screen every few seconds. I usually run three jobs in parallel, so I want to have a screen that shows, for instance:</p>
  
  <pre><code>1/20: user1: syncing homedir
  current file: /home/user1/www/cache/file12589015.php
  
  12/20: user12: syncing homedir
  current file: /home/user12/mail/joe/mailfile
  
  5/20: user5: collecting information
  current file: 
  </code></pre>
  
  <p>I can certainly get the above status output together no problem, but my current hangup is separating the output from the individual parallel processes into three different... pipes? variables? files? so that it can be parsed into the above information.</p>