title: Sleeping process until completed in Go
body: <p>I am trying to automate a process in Go. I have been able to implement threads and do the process accordingly however the output is mixed and matched.</p>
  
  <p>I was wondering if there is a way to show the output as it is produced by the program and according to the program's process. So if task A completes before task B, we show A's output before B, or vice-versa.</p>
  
  <pre><code>package main
  
  import (
      "fmt"
      "log"
      "os"
      "os/exec"
      "sync"
  )
  
  var url string
  var wg sync.WaitGroup
  
  func nikto() {
      cmd := exec.Command("nikto", "-h", url)
      cmd.Stdout = os.Stdout
      err := cmd.Run()
      if err != nil {
          log.Fatal(err)
      }
      wg.Done()
  }
  
  func whois() {
  
      cmd := exec.Command("whois", "google.co")
      cmd.Stdout = os.Stdout
      err := cmd.Run()
      if err != nil {
          log.Fatal(err)
      }
      wg.Done()
  }
  func main() {
      fmt.Printf("Please input URL")
      fmt.Scanln(&amp;url)
      wg.Add(1)
      go nikto()
      wg.Add(1)
      go whois()
      wg.Wait()
  }
  </code></pre>