mirror of https://github.com/01-edu/public.git
nprimo
2 years ago
committed by
Niccolò Primo
3 changed files with 103 additions and 0 deletions
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# create a function to be called everytime the process exit |
||||
abort () { |
||||
rm exp.log job.log |
||||
} |
||||
|
||||
trap 'abort' EXIT |
||||
|
||||
|
||||
set -euo pipefail |
||||
IFS=' |
||||
' |
||||
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd) |
||||
|
||||
SUBMITTED='student/job-regist.sh' |
||||
EXPECTED='solutions/job-regist.sh' |
||||
|
||||
wait_bg_jobs () { |
||||
while [ -n "$(jobs | grep -i running)" ]; do |
||||
echo -n "." |
||||
sleep 1 |
||||
done |
||||
echo |
||||
} |
||||
|
||||
# test cases |
||||
one_process () { |
||||
sleep 2 & |
||||
source $script_dirS/$1 |
||||
} |
||||
|
||||
two_processes () { |
||||
sleep 3 & |
||||
sleep 4 & |
||||
source $script_dirS/$1 |
||||
} |
||||
|
||||
one_process_and_kill () { |
||||
echo do something |
||||
} |
||||
|
||||
one_process_and_suspend () { |
||||
echo do something |
||||
} |
||||
# end of test cases |
||||
|
||||
challenge () { |
||||
echo "testing $1 case" |
||||
$1 $SUBMITTED & |
||||
$1 $EXPECTED & |
||||
|
||||
wait_bg_jobs |
||||
|
||||
diff <(cat exp.log) <(cat job.log) |
||||
} |
||||
|
||||
challenge one_process |
||||
challenge two_processes |
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
IFS=' |
||||
' |
||||
PID=$(jobs -l %1 | grep -Eo '[\+\-] [0-9]+' | grep -Eo '[0-9]+') |
||||
LOG_FILE="exp.log" |
||||
|
||||
while kill -0 "$PID" 2> /dev/null; do |
||||
echo $(date +"%F %T") - $(jobs %1) >> "$LOG_FILE" |
||||
sleep 1 |
||||
done |
@ -0,0 +1,33 @@
|
||||
## job-regist |
||||
|
||||
### Instruction |
||||
|
||||
Create a script, `job-regist.sh`, that will be able to monitor a specific background job. |
||||
|
||||
The script needs to track the status of the first jobs spawned by the current terminal and periodically save the status into a `job.log` file. It must append the new update without modifying the previous content. |
||||
|
||||
Each update needs to be appended to the file with the current format: `YYYY-MM-DD hh:mm:ss - <job status>` |
||||
|
||||
The script should stop running as soon as the job it is tracking ends. |
||||
|
||||
### Usage |
||||
|
||||
Here an example of how the script should behave: |
||||
|
||||
```console |
||||
$ sleep 10 & |
||||
$ sleep 12 & |
||||
$ source job-regist.sh |
||||
$ cat job.log |
||||
2023-02-08 10:37:50 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:51 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:52 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:53 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:54 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:55 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:56 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:57 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:58 - [1]+ Running sleep 10 & |
||||
2023-02-08 10:37:59 - [1]+ Running sleep 10 & |
||||
$ |
||||
``` |
Loading…
Reference in new issue