-
Notifications
You must be signed in to change notification settings - Fork 21
Home
Welcome to the OptSched wiki!
This is a place for helpful tips and tricks for working with OptSched as a project developer.
Building the benchmark suites take a long time. There are also several long-running tasks which we may need to do. For this, the screen command can be useful.
In it's simplest form, run: screen -q the command to run (e.g. screen -q ninja), or screen -q bash -c '...' for more complex scripts which need redirection or pipes. Ctrl+AD puts the screen into the background, and you can then log out of your ssh session. screen -r resumes.
More generally, you can have screen work as a task queue and queue up several commands to run after each other. See this SuperUser answer:
startqueue: starts the queuing system.
#!/usr/bin/env bash
screen -d m -S queuequeue: enqueue a command
#!/usr/bin/env bash
screen -S queue -X stuff "$@^M"Where the ^M is a single special character. In vim in insert mode, produce it by typing Ctrl+V M. You may want to :set list to show the special character.
viewqueue: Look at the screen.
#!/usr/bin/env bash
screen -S queue -rWe often have multiple differently-configured run results in directories. As an example, consider a/ and b/ both with 0.log and 1.log. How do we run a tool over the corresponding files a/0.log b/0.log and a/1.log b/1.log?
$ paste -d ' \n' <(find a/ -type f) <(find b/ -type f) | xargs -L1 echo
a/0.log b/0.log
a/1.log b/1.logYou could also just paste -d '\n' and use xargs -L2 instead.
paste -d ' \n' takes the two redirected shell results (<(...)) and zips the lines together; with just '\n', the lines are interleaved.
xargs uses stdin as the commandline arguments of what follows it, but -L# tells it to stick to # lines per command invocation.