diff --git a/src/header/sys_resource/mod.rs b/src/header/sys_resource/mod.rs
index 03c95702c7ae8abd77b09ade3e21172e67f78b5a..ffe4d2a60806684f579cd8e4e533105df69b6f26 100644
--- a/src/header/sys_resource/mod.rs
+++ b/src/header/sys_resource/mod.rs
@@ -61,10 +61,23 @@ pub struct rusage {
     pub ru_nivcsw: c_long,
 }
 
-// #[no_mangle]
-// pub unsafe extern "C" fn getpriority(which: c_int, who: id_t) -> c_int {
-//     unimplemented!();
-// }
+pub const PRIO_PROGRESS: c_int = 0;
+pub const PRIO_PGRP: c_int = 1;
+pub const PRIO_USER: c_int = 2;
+
+#[no_mangle]
+pub unsafe extern "C" fn getpriority(which: c_int, who: id_t) -> c_int {
+     let r = Sys::getpriority(which, who);
+     if r < 0 {
+         return r
+     }
+     20-r
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn setpriority(which: c_int, who: id_t, nice: c_int) -> c_int {
+     Sys::setpriority(which, who, nice)
+}
 
 #[no_mangle]
 pub unsafe extern "C" fn getrlimit(resource: c_int, rlp: *mut rlimit) -> c_int {
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index eb146ac78063157fa5154dd468b5c4c971cb9984..b657be7434e58157ea0e57211619d37d65899c6b 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -259,6 +259,10 @@ impl Pal for Sys {
         e(unsafe { syscall!(GETPPID) }) as pid_t
     }
 
+    fn getpriority(which: c_int, who: id_t) -> c_int {
+        e(unsafe { syscall!(GETPRIORITY, which, who) }) as c_int
+    }
+
     fn getrandom(buf: &mut [u8], flags: c_uint) -> ssize_t {
         e(unsafe { syscall!(GETRANDOM, buf.as_mut_ptr(), buf.len(), flags) }) as ssize_t
     }
@@ -452,6 +456,10 @@ impl Pal for Sys {
         e(unsafe { syscall!(SETPGID, pid, pgid) }) as c_int
     }
 
+    fn setpriority(which: c_int, who: id_t, prio: c_int) -> c_int {
+        e(unsafe { syscall!(SETPRIORITY, which, who, prio) }) as c_int
+    }
+
     fn setregid(rgid: gid_t, egid: gid_t) -> c_int {
         e(unsafe { syscall!(SETREGID, rgid, egid) }) as c_int
     }
diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs
index 485ba0a1a76a94560f1b75741cc595629beb6261..2333370ca30868d8bbca388c8077eb7a1306409c 100644
--- a/src/platform/pal/mod.rs
+++ b/src/platform/pal/mod.rs
@@ -96,6 +96,8 @@ pub trait Pal {
 
     fn getppid() -> pid_t;
 
+    fn getpriority(which: c_int, who: id_t) -> c_int;
+
     fn getrandom(buf: &mut [u8], flags: c_uint) -> ssize_t;
 
     unsafe fn getrlimit(resource: c_int, rlim: *mut rlimit) -> c_int;
@@ -163,6 +165,8 @@ pub trait Pal {
 
     fn setpgid(pid: pid_t, pgid: pid_t) -> c_int;
 
+    fn setpriority(which: c_int, who: id_t, prio: c_int) -> c_int;
+
     fn setregid(rgid: gid_t, egid: gid_t) -> c_int;
 
     fn setreuid(ruid: uid_t, euid: uid_t) -> c_int;
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index 90fa2ff2e62dfe67ee7a1217abaf77fc94e5a179..90e794f13f26d7eb4dc8e29e2434c3720b9de345 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -499,6 +499,12 @@ impl Pal for Sys {
         e(syscall::getppid()) as pid_t
     }
 
+    fn getpriority(which: c_int, who: id_t) -> c_int {
+        // TODO
+        unsafe { errno = ENOSYS };
+        -1
+    }
+
     fn getrandom(buf: &mut [u8], flags: c_uint) -> ssize_t {
         //TODO: make this a system call?
 
@@ -785,6 +791,12 @@ impl Pal for Sys {
         e(syscall::setpgid(pid as usize, pgid as usize)) as c_int
     }
 
+    fn setpriority(which: c_int, who: id_t, prio: c_int) -> c_int {
+        // TODO
+        unsafe { errno = ENOSYS };
+        -1
+    }
+
     fn setregid(rgid: gid_t, egid: gid_t) -> c_int {
         e(syscall::setregid(rgid as usize, egid as usize)) as c_int
     }